2013-04-25 143 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;