在hibernate中定义列

在hibernate中定义列,hibernate,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 Arr

我已经创建了两个表

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;

}
公共A类{
@列(name=“username”,unique=true,nullable=false)
@身份证
字符串用户名;
@OneToMany(cascade=CascadeType.ALL,fetch=FetchType.LAZY)
@JoinColumn(name=“username”,nullable=false)
列表键=新的ArrayList();
}
公共B级{
@列(name=“key”,unique=true,nullable=false)
@身份证
字符串id;
}
现在,当我们看到B的数据库表时,我可以看到映射到A的数据库表的用户名

现在我想访问B中的用户名,而不需要任何加入。如果我写的是直接sql,我就可以不用加入

在hibernate中如何执行此操作


如何在此处创建映射?

要获得所有相关或不相关的结果,必须使用rigth outer join

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

但是,在您的模型中,B类中缺少@manytone关系要存在一对多关系,您需要有多对一关系才能建立联接。一对多映射是多对一映射关系的反面。当您有多对一并且希望从相反的一侧创建关联时,可以使用此选项

@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;
}
因此,根据您拥有的类,实体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;
}
@实体
公共B级{
@身份证
私有整数id;
@许多酮
私人B,;
}
@实体
公共A类{
@身份证
私有整数id;
@OneToMany(mappedBy=“b”)

私人收藏

您忘了将用户名添加到B类,否则OneToMany将加入什么?