2012-04-12 5 views
1

Dies ist, was ich in SQL Query-String erwartet:HQL - wie Daten abzufragen von einer Eins-zu-viele-Beziehung und den Zustand auf der zweiten Einheit Feld

SELECT  dbo.FRIEND.FriendId, dbo.FRIEND.MemberId, dbo.FRIEND.FriendMemberId, dbo.FRIEND.DateAdded 
FROM   dbo.FRIEND INNER JOIN 
         dbo.MEMBER ON dbo.FRIEND.FriendMemberId = dbo.MEMBER.MemberId 
WHERE  (dbo.MEMBER.Activate = 1) 

Dies ist meine Einheiten mit Beziehung: Entity Freund Feld

@Id 
@Column(name = "[FriendId]") 
@GeneratedValue(strategy = GenerationType.IDENTITY) 
private Long    friendId; 

@Column(name = "[MemberId]") 
private Long    memberId; 

@OneToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL) 
@JoinColumn(name = "[FriendMemberId]") 
private Member   friendMember; 

@Column(name = "[DateAdded]") 
private Date    dateAdded; 

Entity Mitglied Feld

@Id 
@Column(name = "[MemberId]") 
@GeneratedValue(strategy = GenerationType.IDENTITY) 
private Long    memberId; 

@Column(name = "[Activate]", columnDefinition = "boolean default true") 
private boolean   activate; 

Hier ist meine HQL-Abfrage:

FROM Friend as f Left join f.Member as m WHERE f.MemberId = :memberId AND m.activate = true 

aber ich habe Fehler. Also, wie sollte ich schreiben HQL-Abfrage erhalten Daten und ihre Bedingung hängt von member.activate?

+0

Im Titel fragen Sie nach '@ OneToMany', aber im Inhalt gibt es nur' @ OneToOne'. –

Antwort

1

Ihre Anfrage hat einen Tippfehler. Sie sollten den Feldnamen anstelle des Typs verwenden, wenn Sie auf das Feld zugreifen.

Versuchen Sie folgendes:

FROM Friend as f Left join f.friendMember as m WHERE f.memberId = :memberId AND m.activate = true 

Wenn Sie andere Probleme haben. Bitte zeigen Sie mir das Protokoll.

+0

Ich habe HQL oben verwendet, aber es ist auch ein Fehler. Log ist: org.hibernate.QueryException: Eigenschaft konnte nicht aufgelöst werden: Mitglied von 'Zeige meine Entity-Paketadresse' mit HQL. Also, was soll ich korrigieren? – sokheng

2

Sie können mit der Punktnotation auf Untertabellen zugreifen, und Hibernate kümmert sich um die Verknüpfung für Sie.

SELECT FROM Friend f WHERE f.friendMember.activate = true 

Das ist ein Teil warum HQL so schön ist.