我有一张这样的表:
Id int
Source VARCHAR
Target VARCHAR
我想这样查询:
select * from `TestTable` t1
left join `TestTable` t2 on t1.`Target` = t2.`Target`
and t1.`Id` <> t2.`Id`
那么如何使用java注释对映射进行编码?
如何用hibernate查询?
答案 0 :(得分:0)
使用同一个表在hibernate中映射一对多不是你可以用这样的注释做的问题:
@Entity
@Table(name = "test1")
public class Test1 implements Serializable {
private int id;
private String source;
private String target;
private List<Test1> others;
@Id
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
@Column(name = "source")
public String getSource() {
return source;
}
public void setSource(String source) {
this.source = source;
}
@Column(name = "target")
public String getTarget() {
return target;
}
public void setTarget(String target) {
this.target = target;
}
@OneToMany(targetEntity = Test1.class)
public List<Test1> getOthers() {
return others;
}
public void setOthers(List<Test1> others) {
this.others = others;
}
}
问题是你的关系的类型,因为关系似乎不是主键。然后关系不严格“OneToMany”。使用您编写的查询,您可以更改JoinColumn批注中的referencedColumnName,如下所示:
@JoinColumn(name = "target", referencedColumnName = "target")
但是使用此映射,如果父对象具有相同的“目标”字段,则父对象将作为子对象包含,因为您无法将查询的其他部分放在映射中
t1.`Id` <> t2.`Id`