2013-04-25 93 views
1

我有簡單的實體,如:使用Hibernate查詢與實體領域

@Entity 
    public class University implements Serializable { 

     /** The Constant serialVersionUID. */ 
     private static final long serialVersionUID = 1L; 

     @Id 
     @GeneratedValue(strategy = GenerationType.AUTO) 
     private int id; 

     @Column 
     String name; 

     @Column 
     String address; 

     @Column 
     Student student; 
    } 

和實體學生:

@Entity 
    public class Student implements Serializable { 

     /** The Constant serialVersionUID. */ 
     private static final long serialVersionUID = 1L; 

     @Id 
     @GeneratedValue(strategy = GenerationType.AUTO) 
     private int id; 

     @Column 
     String Firstname; 

     @Column 
     String LastName; 

     @Column 
     StudentStatus status; 
    } 

我可以創造@JoinFormula或類似的東西來創建查詢,這將從學生實體到大學實體的學生?

我想類似的東西:

@JoinFormula("SELECT l FROM Student l where l.id = 1") 
    Student student; 

,但它不工作。 我可以創建查詢來選擇一些學生嗎?

已更新: @JoinFormula從未打過電話。

+1

根本不是。我想創建查詢,以採取學生的一些參數,所以我不想使用OneToMany註釋。列學生只是可變的。我不想使用OneToMany映射。 – 2013-04-25 11:18:34

+0

你在這裏檢查:[Hibernate @JoinFormula](http://stackoverflow.com/questions/10980337/hibernate-joinformula) – 2013-04-25 11:19:28

+0

是的,我試過了,但公式總是返回NULL。看起來這個公式從未被調用過。 – 2013-04-25 11:26:32

回答

0

我可能會錯過poit,但是如果你只是想引用另一個實體,你可以使用@ManyToOne註解。

例子:

@ManyToOne 
public MediaLibrary getParentLibrary() { 
    return parentLibrary; 
} 

與之相似,如果你有一個清單,你可以使用@ManyToMany註釋,然後指定正確的連接表:

例子:

@ManyToMany(fetch = FetchType.EAGER, cascade = { CascadeType.MERGE, CascadeType.REFRESH, }) 
@JoinTable(name = "MediaDataTag", joinColumns = { @JoinColumn(name = "MediaData_Id") }, inverseJoinColumns = { @JoinColumn(name = "Tag_Id") }) 
public Set<Tag> getTags() { 
    return this.tags; 
} 

如果您提供明確的用例,提供特定的解決方案會更容易。

0

EclipseLink有一個偉大的一套JPA的文檔和例子(即使您使用的是不同的實現)的

嘗試使用這個,而不是(我假設一所大學可以有不止一個學生)

@OneToMany(mappedBy="university") 
private Set<Student> student; 

而在學生中,您將擁有反向映射

@ManyToOne(fetch=FetchType.LAZY) 
@JoinColumn(name="UniversityID") 
private University university;