STh*_*Fox 7 java hibernate joincolumn or-condition
我有2个Java类,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
}
Run Code Online (Sandbox Code Playgroud)
关系:
@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
}
Run Code Online (Sandbox Code Playgroud)
每个Person都有一个关系列表(或不关系),当关系的child_id或parent_id等于person的id时,应该将关系添加到列表中.
TL; DR:当relation.child_id OR relation.parent_id = person.id
=>将关系添加到人的关系列表时
我面临的问题是这个注释:
@JoinColumns({
@JoinColumn(name = "child_id", referencedColumnName="id"),
@JoinColumn(name = "parent_id", referencedColumnName="id")
})
Run Code Online (Sandbox Code Playgroud)
创建以下SQL(只是必要的部分):
relations relations6_
on this_.id=relations6_.slave_id
and this_.id=relations6_.master_id
Run Code Online (Sandbox Code Playgroud)
Java Hibernate中正确的注释是什么,生成一个说OR而不是AND的SQL语句
您可以使用的一些选项:
Relation
。@Subselect
。这是一种 Hibernate 视图,如果您无力创建真正的数据库视图或更改数据库架构以更好地适应实体模型结构,则适合您。此外,您始终可以对从站和主站使用两个单独的关联:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
但是,请记住,将所有这些连接到单个查询中需要主设备和从设备之间的完整笛卡尔积。
归档时间: |
|
查看次数: |
1606 次 |
最近记录: |