Hibernate - OneToMany 只检索一行
Hibernate - OneToMany retrieving only one row
我有以下 class 具有 @OneToMany
关系,但它只是 returns 两行之一:
@Entity
@javax.persistence.Table(name = "as_itm_ext")
public class ItemExtensionEntity implements java.io.Serializable {
@OneToMany(fetch = FetchType.EAGER, cascade = { CascadeType.ALL })
@JoinColumns({ @JoinColumn(name = "id_itm", referencedColumnName = "id_itm", insertable = false, updatable = false) })
public Set<ItemAttributeEntity> getItemAttributeEntities() {
return this.itemAttributeEntities;
}
public void setItemAttributeEntities(Set<ItemAttributeEntity> itemAttributeEntities) {
this.itemAttributeEntities = itemAttributeEntities;
}
}
以及要检索的class:
@Entity
@javax.persistence.Table(name = "as_itm_att")
public class ItemAttributeEntity implements java.io.Serializable {
private static final long serialVersionUID = 1L;
/**
* AttributeKey,The key of the attribute.
*/
private ItemAttributeEntityId id;
/**
* AttributeValue,The value of the attribute.
*/
private String attributeValue;
public ItemAttributeEntity() {
}
public ItemAttributeEntity(ItemAttributeEntityId id, String attributeValue) {
this.id = id;
this.attributeValue = attributeValue;
}
/**
* AttributeKey,The key of the attribute.
*/
@EmbeddedId
@AttributeOverrides({
@AttributeOverride(name = "itemId", column = @Column(name = "id_itm", nullable = false, length = 32)),
@AttributeOverride(name = "attributeKey", column = @Column(name = "att_key", nullable = false, length = 32)) })
public ItemAttributeEntityId getId() {
return this.id;
}
public void setId(ItemAttributeEntityId id) {
this.id = id;
}
/**
* AttributeValue,The value of the attribute.
*/
@Column(name = "att_value", nullable = false, length = 32)
public String getAttributeValue() {
return this.attributeValue;
}
public void setAttributeValue(String attributeValue) {
this.attributeValue = attributeValue;
}
}
我已经尝试将 Set
更改为 List
但没有成功(在阅读了一些关于它们之间的差异之后,更改它没有任何意义)。
我不知道发生了什么,也不确定它是否总是这样。
谢谢!
更新:尝试实施equals
,没有任何反应。
据我了解,您需要在 ItemAttributeEntity
class 中添加 ItemExtensionEntity
的引用(如@ManyToOne)和
在实体的 @OneToMany 注释中添加 mappedby 属性 ItemExtensionEntity
参考:Can someone please explain mappedBy in hibernate?
@Entity
@javax.persistence.Table(name = "as_itm_ext")
public class ItemExtensionEntity implements java.io.Serializable {
@OneToMany(mappedBy="parentEntity" ,fetch = FetchType.EAGER, cascade = { CascadeType.ALL })
//@JoinColumns({ @JoinColumn(name = "id_itm", referencedColumnName = "id_itm", insertable = false, updatable = false) })
public Set<ItemAttributeEntity> getItemAttributeEntities() {
return this.itemAttributeEntities;
}
public void setItemAttributeEntities(Set<ItemAttributeEntity> itemAttributeEntities) {
this.itemAttributeEntities = itemAttributeEntities;
}
}
@Entity
@javax.persistence.Table(name = "as_itm_att")
public class ItemAttributeEntity implements java.io.Serializable {
private static final long serialVersionUID = 1L;
/**
* AttributeKey,The key of the attribute.
*/
private ItemAttributeEntityId id;
/**
* AttributeValue,The value of the attribute.
*/
private String attributeValue;
@ManyToOne
@JoinColumn(name="<columnname>", nullable=false)
private ItemExtensionEntity parentEntity;
//add getter and setters
public ItemAttributeEntity() {
}
public ItemAttributeEntity(ItemAttributeEntityId id, String attributeValue) {
this.id = id;
this.attributeValue = attributeValue;
}
/**
* AttributeKey,The key of the attribute.
*/
@EmbeddedId
@AttributeOverrides({
@AttributeOverride(name = "itemId", column = @Column(name = "id_itm", nullable = false, length = 32)),
@AttributeOverride(name = "attributeKey", column = @Column(name = "att_key", nullable = false, length = 32)) })
public ItemAttributeEntityId getId() {
return this.id;
}
public void setId(ItemAttributeEntityId id) {
this.id = id;
}
/**
* AttributeValue,The value of the attribute.
*/
@Column(name = "att_value", nullable = false, length = 32)
public String getAttributeValue() {
return this.attributeValue;
}
public void setAttributeValue(String attributeValue) {
this.attributeValue = attributeValue;
}
}
尝试在 itemAttributeEntities.
上使用 fetch = FetchType.LAZY
我有以下 class 具有 @OneToMany
关系,但它只是 returns 两行之一:
@Entity
@javax.persistence.Table(name = "as_itm_ext")
public class ItemExtensionEntity implements java.io.Serializable {
@OneToMany(fetch = FetchType.EAGER, cascade = { CascadeType.ALL })
@JoinColumns({ @JoinColumn(name = "id_itm", referencedColumnName = "id_itm", insertable = false, updatable = false) })
public Set<ItemAttributeEntity> getItemAttributeEntities() {
return this.itemAttributeEntities;
}
public void setItemAttributeEntities(Set<ItemAttributeEntity> itemAttributeEntities) {
this.itemAttributeEntities = itemAttributeEntities;
}
}
以及要检索的class:
@Entity
@javax.persistence.Table(name = "as_itm_att")
public class ItemAttributeEntity implements java.io.Serializable {
private static final long serialVersionUID = 1L;
/**
* AttributeKey,The key of the attribute.
*/
private ItemAttributeEntityId id;
/**
* AttributeValue,The value of the attribute.
*/
private String attributeValue;
public ItemAttributeEntity() {
}
public ItemAttributeEntity(ItemAttributeEntityId id, String attributeValue) {
this.id = id;
this.attributeValue = attributeValue;
}
/**
* AttributeKey,The key of the attribute.
*/
@EmbeddedId
@AttributeOverrides({
@AttributeOverride(name = "itemId", column = @Column(name = "id_itm", nullable = false, length = 32)),
@AttributeOverride(name = "attributeKey", column = @Column(name = "att_key", nullable = false, length = 32)) })
public ItemAttributeEntityId getId() {
return this.id;
}
public void setId(ItemAttributeEntityId id) {
this.id = id;
}
/**
* AttributeValue,The value of the attribute.
*/
@Column(name = "att_value", nullable = false, length = 32)
public String getAttributeValue() {
return this.attributeValue;
}
public void setAttributeValue(String attributeValue) {
this.attributeValue = attributeValue;
}
}
我已经尝试将 Set
更改为 List
但没有成功(在阅读了一些关于它们之间的差异之后,更改它没有任何意义)。
我不知道发生了什么,也不确定它是否总是这样。
谢谢!
更新:尝试实施equals
,没有任何反应。
据我了解,您需要在 ItemAttributeEntity
class 中添加 ItemExtensionEntity
的引用(如@ManyToOne)和
在实体的 @OneToMany 注释中添加 mappedby 属性 ItemExtensionEntity
参考:Can someone please explain mappedBy in hibernate?
@Entity
@javax.persistence.Table(name = "as_itm_ext")
public class ItemExtensionEntity implements java.io.Serializable {
@OneToMany(mappedBy="parentEntity" ,fetch = FetchType.EAGER, cascade = { CascadeType.ALL })
//@JoinColumns({ @JoinColumn(name = "id_itm", referencedColumnName = "id_itm", insertable = false, updatable = false) })
public Set<ItemAttributeEntity> getItemAttributeEntities() {
return this.itemAttributeEntities;
}
public void setItemAttributeEntities(Set<ItemAttributeEntity> itemAttributeEntities) {
this.itemAttributeEntities = itemAttributeEntities;
}
}
@Entity
@javax.persistence.Table(name = "as_itm_att")
public class ItemAttributeEntity implements java.io.Serializable {
private static final long serialVersionUID = 1L;
/**
* AttributeKey,The key of the attribute.
*/
private ItemAttributeEntityId id;
/**
* AttributeValue,The value of the attribute.
*/
private String attributeValue;
@ManyToOne
@JoinColumn(name="<columnname>", nullable=false)
private ItemExtensionEntity parentEntity;
//add getter and setters
public ItemAttributeEntity() {
}
public ItemAttributeEntity(ItemAttributeEntityId id, String attributeValue) {
this.id = id;
this.attributeValue = attributeValue;
}
/**
* AttributeKey,The key of the attribute.
*/
@EmbeddedId
@AttributeOverrides({
@AttributeOverride(name = "itemId", column = @Column(name = "id_itm", nullable = false, length = 32)),
@AttributeOverride(name = "attributeKey", column = @Column(name = "att_key", nullable = false, length = 32)) })
public ItemAttributeEntityId getId() {
return this.id;
}
public void setId(ItemAttributeEntityId id) {
this.id = id;
}
/**
* AttributeValue,The value of the attribute.
*/
@Column(name = "att_value", nullable = false, length = 32)
public String getAttributeValue() {
return this.attributeValue;
}
public void setAttributeValue(String attributeValue) {
this.attributeValue = attributeValue;
}
}
尝试在 itemAttributeEntities.
上使用 fetch = FetchType.LAZY