我创建了两个表。
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,我可以写,而不加入。
如何在休眠状态下执行此操作?
如何在此处创建映射?
答案 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