我已将这种关系映射为例如。
@Entity
@Table(name = "shop")
public class Shop implements Serializable {
...
@OneToMany(mappedBy = "shop", fetch=FetchType.LAZY)
private Set<Event> events;
...
}
@Entity
@Table(name = "event")
public class Event implements Serializable {
...
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "shop_id", nullable = false)
private Shop shop;
...
}
调用Local getEvent()时会在Colletion中加载一个带有一些事件的列表,但是每个事件都在另一个Shop里面,可能在另一个事件内部连续发生..这样可以吗?响应JSON结构可以做任何问题吗?
答案 0 :(得分:2)
序列化到JSON期间我遇到了问题
...
at org.codehaus.jackson.map.ser.std.CollectionSerializer.serializeContents(CollectionSerializer.java:72)
at org.codehaus.jackson.map.ser.std.CollectionSerializer.serializeContents(CollectionSerializer.java:23)
at org.codehaus.jackson.map.ser.std.AsArraySerializerBase.serialize(AsArraySerializerBase.java:86)
at org.codehaus.jackson.map.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:446)
at org.codehaus.jackson.map.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:150)
at org.codehaus.jackson.map.ser.BeanSerializer.serialize(BeanSerializer.java:112)
at org.codehaus.jackson.map.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:446)
at org.codehaus.jackson.map.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:150)
at org.codehaus.jackson.map.ser.BeanSerializer.serialize(BeanSerializer.java:112)
...
为了解决这个问题,我在一个属性中使用了@JsonIgnore注释:
@Entity
@Table(name = "shop")
public class Shop implements Serializable {
...
@JsonIgnore
@OneToMany(mappedBy = "shop", fetch=FetchType.LAZY)
private Set<Event> events;
...
}
我希望这些信息有用。我还不能添加评论。
答案 1 :(得分:1)
Hibernate 使用提取的数据的标识检查数据,并存储在单个对象中。通过这种方式,hibernate识别要提取的数据,并且仅获取所需的数据。因此负载将是最小的。
但是当您不需要任何其他细节时,最好不使用此Entity类及其中的关系来获取数据。因为它只是购买了太多的数据。您可以将此作为一个不错的选择
例如 如果您只需要表雇员中的员工姓名作为付款表中的Id,那么您可以使用VO Class并仅选择您需要的值。
按照步骤
执行查询(也可以使用内部联接)
从表1 A,表2B中选择A.Col1,A.Col2,A.Col3,B.Col1,B.Col2,其中A.RelationId = B.ID;
A.RelationId=B.ID
是两个表之间的关系。
您将获得类voClassName的对象,其中包含您需要的值。
有关使用关系和映射提升效果的更多详细信息,请参阅参考手册中的section 21.1 of "Improving Performance"。