Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在Hibernate中映射同一个表中的一对多映射_Java_Hibernate_Orm_Hibernate Mapping - Fatal编程技术网

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,看看会发生什么?看看这个自连接示例。我假设在你的情况下唯一会改变的是查询。