在hibernate中定义列

时间:2014-12-28 09:33:29

标签: hibernate

我创建了两个表。

public  class A {

@Column(name = "username", unique = true, nullable = false)
@Id
String username;

@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
@JoinColumn(name = "username", nullable = false)
List<B> Keys = new ArrayList<B>();

}

public class B {

@Column(name = "key", unique = true, nullable = false)
@Id
String id;

}

现在,当我们看到B的数据库表时,我可以看到映射到A的数据库表的用户名。

现在我想在没有任何加入的情况下访问B中的用户名。如果我写直接sql,我可以写,而不加入。

如何在休眠状态下执行此操作?

如何在此处创建映射?

2 个答案:

答案 0 :(得分:0)

要获取所有相关或不相关的结果,您必须使用 rigth外部联接

Select A.username from A right outer join A.keys k group by A.username

但在你的模型中缺少B类中的@ManyToOne关系

答案 1 :(得分:0)

对于存在的一对多关系,您需要具有多对一关系才能建立连接。一对多映射是与多对一映射关系的反面。当你有多对一并希望从反面创建关联时使用。

因此,根据您所拥有的类,实体B是拥有方,实体A是反方。

@Entity
public class B {
   @Id
   private Integer id;

   @ManyToOne
   private B b;
}


@Entity
public class A {
   @Id
   private Integer id;

   @OneToMany(mappedBy="b")
   private Collection<A> a;
}

您可以使用@JoinColumn和@Column覆盖列名称。我试图在这里以简单的方式解释映射One-To-Many mapping