Java 在JPA中是否仍然可以检索子项的直接父项?
我正在使用Spring框架创建一个简单的REST服务器。 其中一个类需要具有自联接一对多关系,才能检索有关其父对象的数据。这个班看起来像这样Java 在JPA中是否仍然可以检索子项的直接父项?,java,spring,jpa,Java,Spring,Jpa,我正在使用Spring框架创建一个简单的REST服务器。 其中一个类需要具有自联接一对多关系,才能检索有关其父对象的数据。这个班看起来像这样 @Entity @Table(name = "item", schema = "tmp", uniqueConstraints = { @UniqueConstraint(columnNames = "item_id"), @UniqueConstraint(columnNames = "item_name")}) public class Ite
@Entity
@Table(name = "item", schema = "tmp", uniqueConstraints = {
@UniqueConstraint(columnNames = "item_id"), @UniqueConstraint(columnNames = "item_name")})
public class Item implements Serializable {
private static final long serialVersionUID = 1L;
private Integer itemId;
private String itemName;
private String itemDescription;
private Item itemParent;
private boolean isEndItem;
private List<Item> childrenItems;
public Item() {}
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "item_id", unique = true, nullable = false)
public Integer getItemId() {
return itemId;
}
public void setItemId(final Integer itemId) {
this.itemId = itemId;
}
@Column(name = "item_name", unique = true, nullable = false)
public String getItemName() {
return itemName;
}
public void setItemName(final String itemName) {
this.itemName = itemName;
}
@Column(name = "item_description", unique = false, nullable = false)
public String getItemDescription() {
return itemDescription;
}
public void setItemDescription(final String itemDescription) {
this.itemDescription = itemDescription;
}
@ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JsonManagedReference(value = "item-item")
@JoinColumn(name="item_parentid")
public Item getParentItem() {
return this.itemParent;
}
public void setParentItem(final Item itemParent){
this.itemParent = itemParent;
}
@OneToMany(mappedBy="childrenItems", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JsonBackReference(value = "item-item")
public List<Item> getChildrenItems(){
return this.childrenItems;
}
public void setChildrenItems(final List<Item> childrenItems){
this.childrenItems = childrenItems;
}
@Column(name = "item_isendproduct", unique = false, nullable = false)
public boolean isEndItem() {
return isEndItem;
}
public void setEndItem(final boolean isEndItem) {
this.isEndItem = isEndItem;
}
}
但我不想知道有关父对象的父对象的信息。
有什么注释可以用来实现这一点吗
提前感谢您应该添加
parentItemId
,而不是整个父对象。因此,每个项都有一个通过id引用其父项的错误,“@OneToOne或com.tmp.model.item.parentItemId上的@ManyToOne引用了一个未知的实体:java.lang.Integer”@Yogesh的建议对JPA来说是一个错误的建议,关键是要管理它。通常,您会希望将JSON表示与实际存储的格式分离——不过,作为一种快速攻击,您可以在关系字段上使用类似于@JsonIdentityInfo
的内容。@chrylis是否有任何示例我可以看一下?您的映射是错误的。如果您有一个1-N并指定一个mappedBy,那么它应该是元素类中指向该类的字段。对于1-N,mappedBy在另一侧指定N-1字段。你的不是
[
{
"itemId":1,
"itemName":"Entry",
"itemDescription":"Entry Menu",
"endItem":false,
"parentItem":null
},
{
"itemId":2,
"itemName":"Salad",
"itemDescription":"Salad Menu",
"endItem":false,
"parentItem":{
"itemId":1,
"itemName":"Entry",
"itemDescription":"Entry Menu",
"endItem":false,
"parentItem":null
}
},
{
"itemId":3,
"itemName":"House Salad",
"itemDescription":"House Salad",
"endItem":true,
"parentItem":{
"itemId":2,
"itemName":"Salad",
"itemDescription":"Salad Menu",
"endItem":false,
"parentItem":{
"itemId":1,
"itemName":"Entry",
"itemDescription":"Entry Menu",
"endItem":false,
"parentItem":null
}
}
}
]