我遇到一个奇怪的问题:我有一个实体,该类的听众,休眠@更新前/ @ PrePersist不一致
@Entity
@EntityListeners(Listener.class)
public class Foo {
@Id long id;
@ElementCollection Map<String, String> map;
// getters and setters
}
public class Listener {
@PreUpdate
@PrePersist
public void preUpdate(Foo foo) {
System.out.println(foo);
System.out.println(foo.getMap().size());
}
}
@Stateless
public class TestDAO {
@PersistenceContext
EntityManager em;
public void testMerge(Foo foo) {
foo.getMap().put("foo", "test");
System.out.println(foo);
System.out.println(foo.getMap().size());
this.em.merge(foo);
}
}
,然后当我执行testMerge
我得到这个输出(更新与SQL调试):
[email protected]
1
[email protected]
0
Hibernate: insert into Foo values ()
Hibernate: insert into Foo_map (Foo_id, map_KEY, map) values (?, ?, ?) // 1, 'foo', 'test'
所以地图获取数据库上的正确保存,但传递到听者的实体有一个空的地图。发生什么事?
UPDATE:JIRA问题和测试用例 相关JIRA问题:https://hibernate.atlassian.net/browse/HHH-11414 和测试用例:https://github.com/heruan/hibernate-testcase/tree/HHH-11414
是Foo一个新的实体或它已被保存过吗? –
在测试中,我运行它是一个新的实体;我使用'merge',因为在真实场景中它可能是一个新的或现有的。 –
Jira问题:https://hibernate.atlassian.net/browse/HHH-11414 –