Java 使用或条件而不是和条件连接列的注释
我有两个java类,Java 使用或条件而不是和条件连接列的注释,java,hibernate,joincolumn,or-condition,Java,Hibernate,Joincolumn,Or Condition,我有两个java类,Relation和Person,它们都存在于我的数据库中 人: @Entity @Table(name = "persons") public class Person { @Id @Column private int id; @Column private String name; @OneToMany(fetch = FetchType.EAGER) @JoinColumns({ @JoinCo
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
}
每个人都有一个关系列表(或没有),当关系的子id或父id等于该人的id时,应将该关系添加到列表中
TL;博士:
当relation.child\u id或relation.parent\u id=person.id
=>将关系添加到与此人的关系列表中时
我面临的问题是,此注释:
@JoinColumns({
@JoinColumn(name = "child_id", referencedColumnName="id"),
@JoinColumn(name = "parent_id", referencedColumnName="id")
})
创建以下SQL(只是必要的部分):
Java Hibernate中生成SQL语句而不是和的正确注释是什么?您可以使用
@FilterDef
和@Filter
注释。您可以使用的一些选项:
关系
实体中应用公式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;
}
}
公共类人物{
@独身癖
@JoinColumn(name=“slave_id”),
私人名单奴隶;
@独身癖
@JoinColumn(name=“master_id”),
私人名单大师;
公共关系{
列表结果=新的ArrayList(从属);
结果:addAll(masters);
返回结果;
}
}
但是,请记住,在一个查询中连接所有这些查询需要主查询和从查询之间的完全笛卡尔乘积。连接公式和子选择似乎都很有希望。但我不喜欢在这些注释中编写SQL,所以我一直在寻找适合这个问题的答案。@Fox在这种情况下,请查看我更新的答案。无论如何,没有专门为您的案例设计的注释;您必须使用一些变通方法。是的,我能够获取2个列表,但我希望编写更好、更干净的代码。我的代码与你的代码相似。难道没有一个注释可以立即执行此操作吗?@s不,没有这样的注释。
relations relations6_
on this_.id=relations6_.slave_id
and this_.id=relations6_.master_id
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;
}
}