由于内部连接导致hibernate中的重复结果:如何解决?
我有这张桌子:由于内部连接导致hibernate中的重复结果:如何解决?,hibernate,spring-data-jpa,Hibernate,Spring Data Jpa,我有这张桌子: TABLE1 ID PRIMARY KEY FIELD1 TABLE2 T1_ID REFERENCES TABLE1(ID), FIELD1, PRIMARY KEY(T1_ID, FIELD1) 下表: TABLE1 ID PRIMARY KEY FIELD1 TABLE2 T1_ID REFERENCES TABLE1(ID), FIELD1, PRIMARY KEY(T1_ID, FIELD1) 因此,第一个表的主键是第二个表的主键的一部分(也是一个外部引用) 我
TABLE1
ID PRIMARY KEY
FIELD1
TABLE2
T1_ID REFERENCES TABLE1(ID),
FIELD1,
PRIMARY KEY(T1_ID, FIELD1)
下表:
TABLE1
ID PRIMARY KEY
FIELD1
TABLE2
T1_ID REFERENCES TABLE1(ID),
FIELD1,
PRIMARY KEY(T1_ID, FIELD1)
因此,第一个表的主键是第二个表的主键的一部分(也是一个外部引用)
我在hibernate中尝试过这样建模:
@Entity
@Data
public class Table1 {
@Id
@Column("ID")
private Long id; //easy!
@OneToMany(mappedBy = "table2", cascade = CascadeType.ALL, fetch = FetchType.LAZY, orphanRemoval = true)
private List<Table2> references;
}
然后我用它:
@Entity
@Data
public class Table2 {
@EmbeddedId
private Table2Key id;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "T1_ID", insertable = false, updatable = false)
@ToString.Exclude
private Table1 table1;
出于某种原因,当我想要获取我得到的第一个实体的元素时:
select * from TABLE1 t1
inner join TABLE2 t2 on t1.ID=t2.T1_ID
这将导致T1类型的重复实体列表!
我做错了什么
编辑根据一些建议,我尝试将列表更改为一组:
@OneToMany(mappedBy = "table2", cascade = CascadeType.ALL, fetch = FetchType.LAZY, orphanRemoval = true)
private Set<Table2> references;
- 除了Id类型
和Long
被错误地映射到String
之外,我在您的原始帖子中没有看到任何问题。应该是Table2Key
- 如果仍然存在问题,并且如果您手动将数据插入应用程序,我将删除所有数据,并通过
repository方法存储数据spring-data-jpa
- 正如我提到的,数据库中的数据不正确。下面是一个与您的实体完全相同的示例应用程序。它插入数据,然后执行“全部查找”,不包含任何重复项
@Embeddable
@NoArgsConstructor
@AllArgsConstructor
@Data
public class Table2Key {
@Column(name= "T1_ID")
private Long t1Id;
@Column(name = "FIELD1")
private String field1;
}