我正在尝试与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,我必须从数据库中删除第一个元素才能获得第二个元素。
答案 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关系仅返回第一个元素。
花了我很多时间。