我遇到了一個沒有被初始化的Hibernate實體的問題。
它似乎仍然返回一個未初始化的代理...休眠實體代理初始化
如果我看看我的調試信息,我會期待我的實體被初始化。
但它看起來像如下:
entity = {[email protected]}"[email protected][id=1,version=0]"
handler = {[email protected]}
interfaces = {java.lang.Class[2]@9197}
constructed = true
persistentClass = {[email protected]}"class SomeEntityImpl"
getIdentifierMethod = null
setIdentifierMethod = null
overridesEquals = true
componentIdType = null
replacement = null
entityName = {[email protected]}"SomeEntityImpl"
id = {[email protected]}"1"
target = {[email protected]}"[email protected][guid=<null>,id=1,version=0]"
initialized = true
readOnly = true
unwrap = false
session = {[email protected]}"SessionImpl(PersistenceContext[entityKeys=[EntityKey[EntityReferenceImpl#2], EntityKey[SomeEntityImpl#1], EntityKey[...
readOnlyBeforeAttachedToSession = null
sessionFactoryUuid = null
allowLoadOutsideTransaction = false
請注意,我的Hibernate POJO仍然僅包含一個handler
甚至做一個明確的初始化後...
在我的調試視圖,可以看我的「真正的」財產值(不顯示在上面)當我展開target
節點時。
我在做什麼:
EntityReferenceImpl entityReference = findEntityReference(session);
SomeEntity entity = null;
if (entityReference != null) {
// initialize association using a left outer join
HibernateUtil.initialize(entityReference.getSomeEntity());
entity = entityReference.getSomeEntity();
}
return entity;
通知的HibernateUtil.initialize
來電!
SomeEntity
映射:
public class SomeEntityImpl extends AbstractEntity implements SomeEntity {
@OneToMany(mappedBy = "someEntity", fetch = FetchType.EAGER, targetEntity = EntityReferenceImpl.class, orphanRemoval = true)
@Cascade(CascadeType.ALL)
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
private Set<EntityReference> entityReferences = new HashSet<>();
@Target(EntityName.class)
@Embedded
private Name name;
@Target(EntityAddress.class)
@Embedded
private Address address;
...
}
EntityReferenceImpl
映射:
public class EntityReferenceImpl extends AbstractEntity implements EntityReference {
@ManyToOne(optional = true, fetch = FetchType.LAZY, targetEntity = SomeEntityImpl.class)
@JoinColumn(name = "entity_id")
private SomeEntity someEntity;
...
}
那麼什麼是副作用:當POJO後帶有更新的屬性我仍然有相同的結構(如提及上面),我可以看到target
節點下的更新屬性。
但是,當我試圖使用session.merge()
或session.update()
或session.saveOrUpdate()
更新實體時,Hibernate不檢測'髒'屬性並且不會調用對數據庫的更新查詢。
有沒有人有關於這種奇怪行爲的線索?我盡我所能,但沒有任何結果。
所有的幫助是非常歡迎的!
'HibernateUtil'類是什麼包?你不使用'Hibernate'類嗎? – walkeros 2014-10-10 10:59:28
DId你解決了這個問題? Iam面臨類似問題 – 2014-11-13 09:46:34