我有2个Java类Relation和Person,它们都存在于数据库中。
Relation
Person
人:
@Entity @Table(name = "persons") public class Person { @Id @Column private int id; @Column private String name; @OneToMany(fetch = FetchType.EAGER) @JoinColumns({ @JoinColumn(name = "slave_id", referencedColumnName="id"), @JoinColumn(name = "master_id", referencedColumnName="id") }) private List<Relation> relations; //Getters and setters }
关系:
@Entity @Table(name = "relations") public class Relation { @Id @Column private int id; @Column private int child_id; @Column private int parent_id; @Column private String type; //Getters and setters }
每个人都有(或没有)关系列表,当关系的child_id或parent_id等于该人的id时,应将关系添加到列表中。
TL; DR:当relation.child_id OR relation.parent_id = person.id=>将关系添加到与人的关系列表中时
relation.child_id OR relation.parent_id = person.id
我面临的问题是该注释:
@JoinColumns({ @JoinColumn(name = "child_id", referencedColumnName="id"), @JoinColumn(name = "parent_id", referencedColumnName="id") })
创建以下SQL(只是必要的部分):
relations relations6_ on this_.id=relations6_.slave_id and this_.id=relations6_.master_id
Java Hibernate中正确的注释是什么,以生成一条用 OR* 代替 AND 的SQL语句 *
您可以利用的一些选项:
@Subselect
此外,您始终可以为从属服务器和主服务器使用两个单独的关联:
public class Person { @OneToMany @JoinColumn(name = "slave_id"), private List<Relation> slaves; @OneToMany @JoinColumn(name = "master_id"), private List<Relation> masters; public List<Relation> getRelations() { List<Relation> result = new ArrayList<>(slaves); result.addAll(masters); return result; } }
但是,请记住,将它们全部合并到一个查询中需要在主服务器和从服务器之间使用完整的笛卡尔积。