Spring jpa onetomany只返回一个元素

时间:2017-07-05 04:32:25

标签: java hibernate spring-data-jpa

我正在尝试与spring数据jpa建立双向的一对多关系,但是使用@onetomany注释的列表总是返回一个元素。

这是我的实体的代码(省略了setter和getters):

@Entity
@Table(name = "sdk_sdk")
public class SDKEntity {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;

private String version;

@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, mappedBy = "sdk")
@OrderBy("order ASC")
private List<SDKFileEntity> fileEntities;
}

第二个实体:

@Entity
@Table(name = "sdk_file")
public class SDKFileEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
private String fileType;
private Integer sdkId;

public SDKFileEntity() {
}

@ManyToOne
@JoinColumn(name = "id", insertable = false, updatable = false)
private SDKEntity sdk;

我正在尝试使用多个映射,其中sdkId对应于SDKEntity类中的id。 每当我尝试使用spring的存储库从sdkEntity获取sdkfiles时,列表的大小始终为1.

例如:

SDKEntity entity=repository.findOne(foo);
List<SDKFileEntity> files=entity.getFileEntities();

这里文件的大小是1,我必须从数据库中删除第一个元素才能获得第二个元素。

2 个答案:

答案 0 :(得分:0)

这部分代码看起来很可疑

@ManyToOne
@JoinColumn(name = "id", insertable = false, updatable = false)
private SDKEntity sdk;

name =&#34; id&#34;它应该是在数据库列名中写的实际列名,如此

    @JoinColumn(name = "VISIT_ID", referencedColumnName = "ID")
    @ManyToOne
    private Visit visitId;

答案 1 :(得分:0)

对我来说,这里的原因是父实体实现了equals和hashcode 不幸的是,所有现有实体都是平等的。 而且没有一个子实体自己实现。

因此@OneToMany关系仅返回第一个元素。

花了我很多时间。