如何知道子实体是否在休眠中的父实体中加载
How to know if the Child Entity is loaded or not in the Parent Entity in hibernate
我有一个休眠实体,其关系映射为 fetch=FetchType.LAZY
喜欢:
....
private ConsumerEntity consumerEntity;
@ManyToOne(fetchType.LAZY)
@JoinColumn(name="orderId", insertable=false, updateable=false)
public ConsumerEntity getConsumerEntity(){
return this.consumerEntity;
}
....
我想将实体对象转移到 HashMap<String, Object>
,我用 Introspector
来做,目前只忽略子实体,只将非实体成员解析到地图:
protected Map<String, Object> transBean2Map(Object beanObj){
Map<String, Object> map = new HashMap<String, Object>();
try {
BeanInfo beanInfo = Introspector.getBeanInfo(beanObj.getClass());
PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
for (PropertyDescriptor property : propertyDescriptors) {
String key = property.getName();
if (!key.equals("class")
&& !key.endsWith("Entity")) {
Method getter = property.getReadMethod();
Object value = getter.invoke(beanObj);
map.put(key, value);
}
}
} catch (Exception e) {
Logger.getAnonymousLogger().log(Level.SEVERE,"transBean2Map Error " + e);
}
return map;
}
我想将地图中的每个子实体作为嵌入式地图放置,仅当它们已经被获取时(可能通过显式调用 getter()方法或不小心通过其他方法加载,在不打扰的时候提供奖励信息总是一个好主意,对吧?)。
而且不,我不想把每件事都变成 fetchType.EAGER
。只是想检测子实体是否已经加载,然后将它们传输并嵌入到父 Map 中,否则什么也不做(不会查询数据库来获取它)。
做嵌入不会太麻烦,也许只是一些递归。所以我需要知道子实体是否已经加载到父实体中,就像上面示例中的 consumerEntity
一样。
有什么办法可以做到吗?
Hibernate 为此提供了一些工具,您可以尝试以下工具
if (HibernateProxy.class.isInstance(entity.getConsumerEntity())) {
HibernateProxy proxy = HibernateProxy.class.cast(entity.getConsumerEntity());
if (proxy.getHibernateLazyInitializer().isUninitialized()) {
// getConsumerEntity() IS NOT initialized
} else {
// getConsumerEntity() IS initialized
}
}
我有一个休眠实体,其关系映射为 fetch=FetchType.LAZY
喜欢:
....
private ConsumerEntity consumerEntity;
@ManyToOne(fetchType.LAZY)
@JoinColumn(name="orderId", insertable=false, updateable=false)
public ConsumerEntity getConsumerEntity(){
return this.consumerEntity;
}
....
我想将实体对象转移到 HashMap<String, Object>
,我用 Introspector
来做,目前只忽略子实体,只将非实体成员解析到地图:
protected Map<String, Object> transBean2Map(Object beanObj){
Map<String, Object> map = new HashMap<String, Object>();
try {
BeanInfo beanInfo = Introspector.getBeanInfo(beanObj.getClass());
PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
for (PropertyDescriptor property : propertyDescriptors) {
String key = property.getName();
if (!key.equals("class")
&& !key.endsWith("Entity")) {
Method getter = property.getReadMethod();
Object value = getter.invoke(beanObj);
map.put(key, value);
}
}
} catch (Exception e) {
Logger.getAnonymousLogger().log(Level.SEVERE,"transBean2Map Error " + e);
}
return map;
}
我想将地图中的每个子实体作为嵌入式地图放置,仅当它们已经被获取时(可能通过显式调用 getter()方法或不小心通过其他方法加载,在不打扰的时候提供奖励信息总是一个好主意,对吧?)。
而且不,我不想把每件事都变成 fetchType.EAGER
。只是想检测子实体是否已经加载,然后将它们传输并嵌入到父 Map 中,否则什么也不做(不会查询数据库来获取它)。
做嵌入不会太麻烦,也许只是一些递归。所以我需要知道子实体是否已经加载到父实体中,就像上面示例中的 consumerEntity
一样。
有什么办法可以做到吗?
Hibernate 为此提供了一些工具,您可以尝试以下工具
if (HibernateProxy.class.isInstance(entity.getConsumerEntity())) {
HibernateProxy proxy = HibernateProxy.class.cast(entity.getConsumerEntity());
if (proxy.getHibernateLazyInitializer().isUninitialized()) {
// getConsumerEntity() IS NOT initialized
} else {
// getConsumerEntity() IS initialized
}
}