Hibernate 冬眠一个又一个
例如,我映射了这种关系Hibernate 冬眠一个又一个,hibernate,behavior,Hibernate,Behavior,例如,我映射了这种关系 @Entity @Table(name = "shop") public class Shop implements Serializable { ... @OneToMany(mappedBy = "shop", fetch=FetchType.LAZY) private Set<Event> events; ... } 调用Local getEvent()时,会在Colletion中加载一个包含几个事件的列表,但另
@Entity
@Table(name = "shop")
public class Shop implements Serializable {
...
@OneToMany(mappedBy = "shop", fetch=FetchType.LAZY)
private Set<Event> events;
...
}
调用Local getEvent()时,会在Colletion中加载一个包含几个事件的列表,但另一个商店中的每个事件都可能包含另一个事件并依次加载。。可以吗?。响应JSON结构有什么问题吗?我在序列化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;
...
}
@实体
@表(name=“shop”)
公共类商店实现了可序列化{
...
@杰索尼奥雷
@OneToMany(mappedBy=“shop”,fetch=FetchType.LAZY)
私人设置的事件;
...
}
我希望这些信息有帮助。我还不能添加注释。我在序列化到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;
...
}
@实体
@表(name=“shop”)
公共类商店实现了可序列化{
...
@杰索尼奥雷
@OneToMany(mappedBy=“shop”,fetch=FetchType.LAZY)
私人设置的事件;
...
}
我希望这些信息有帮助。我还不能添加注释。Hibernate使用获取的数据的标识检查数据,并将其存储在单个对象中。通过这种方式,hibernate识别要获取的数据,并且只获取所需的数据。因此,负载将是最小的 但是,当您不需要任何其他详细信息时,最好不使用包含关系的实体类来获取数据。因为它只是购买了太多的数据。你可以把它作为一个好的选择 例如 如果您只需要支付表中Id的表employee中的员工姓名,则可以使用VO类并仅选择所需的值 按照步骤操作
A.RelationId=B.ID
是两个表之间的关系有关使用关系和映射提高性能的更多详细信息,请参见参考手册中的。Hibernate使用获取的数据的标识检查数据,并将其存储在单个对象中。通过这种方式,hibernate识别要获取的数据,并且只获取所需的数据。因此,负载将是最小的 但是,当您不需要任何其他详细信息时,最好不使用包含关系的实体类来获取数据。因为它只是购买了太多的数据。你可以把它作为一个好的选择 例如 如果您只需要支付表中Id的表employee中的员工姓名,则可以使用VO类并仅选择所需的值 按照步骤操作
A.RelationId=B.ID
是两个表之间的关系有关使用关系和映射提高性能的更多详细信息,请参阅参考手册。您的问题并不完全清楚。如果是关于定义关系的双方是否会导致循环/无限依赖之类的问题,那么不,不用担心。将对象序列化为JSON也不应该是个问题,当然您需要自己编写序列化代码。我使用MappingJackson2JsonView来完成,有问题吗?@Dani您是否希望知道在使用它时是否存在任何性能问题。?是的,这就是问题所在,迪利普。你问什么还不完全清楚。如果是关于定义关系的双方是否会导致循环/无限依赖之类的问题,那么不,不用担心。将对象序列化为JSON也不应该是个问题,不过当然你需要自己编写序列化代码。我使用MappingJackson2JsonView来做,有问题吗?@Dani你是否希望知道使用它是否会有任何性能问题。?是的,这是个问题@Dileep。谢谢@paulek,对我来说非常好,我只有一个问题,我不需要序列化这个字段,但是,我需要它的非序列化。那么我想我必须把JsonIgnore放在getter中,而不是setter中,是吗?@Dani正如你所说的那样。谢谢@paulek,对我来说太完美了,我只有一个问题,我不需要序列化这个字段,但是,我需要它在unserialize中。“那么我想我必须把杰索尼奥雷放在盖特而不是塞特,是吗?”丹尼,正如你所说的。