Java 如何在Hibernate中映射同一个表中的一对多映射
我有一张这样的桌子:Java 如何在Hibernate中映射同一个表中的一对多映射,java,hibernate,orm,hibernate-mapping,Java,Hibernate,Orm,Hibernate Mapping,我有一张这样的桌子: Id int Source VARCHAR Target VARCHAR select * from `TestTable` t1 left join `TestTable` t2 on t1.`Target` = t2.`Target` and t1.`Id` <> t2.`Id` @Entity @Table(name = "test1") public class Test1 implements Serializable { private int
Id int
Source VARCHAR
Target VARCHAR
select * from `TestTable` t1
left join `TestTable` t2 on t1.`Target` = t2.`Target`
and t1.`Id` <> t2.`Id`
@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;
}
}
@JoinColumn(name = "target", referencedColumnName = "target")
我想这样提问:
Id int
Source VARCHAR
Target VARCHAR
select * from `TestTable` t1
left join `TestTable` t2 on t1.`Target` = t2.`Target`
and t1.`Id` <> t2.`Id`
@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;
}
}
@JoinColumn(name = "target", referencedColumnName = "target")
从`TestTable`t1中选择*
在t1上左连接`TestTable`t2。`Target`=t2。`Target`
和t1.`Id`t2.`Id`
那么,如何使用java注释对映射进行编码呢
如何使用hibernate进行查询?在hibernate中将一对多映射到同一个表不是一个问题,您可以使用如下注释:
Id int
Source VARCHAR
Target VARCHAR
select * from `TestTable` t1
left join `TestTable` t2 on t1.`Target` = t2.`Target`
and t1.`Id` <> t2.`Id`
@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;
}
}
@JoinColumn(name = "target", referencedColumnName = "target")
但在这种映射中,如果父对象具有相同的“target”字段,则父对象将作为子对象包含,因为您无法将查询的其他部分放入映射中
t1.`Id` <> t2.`Id`
t1.`Id`t2.`Id`
到目前为止,您尝试了什么?您是否可以尝试在目标类it self中映射两个关系,即一对多和多对一,您是否可以尝试编写一个HQL,看看会发生什么?看看这个自连接示例。我假设在你的情况下唯一会改变的是查询。