关于使用动态映射实体模式的Hibernate保存

时间:2009-03-11 14:16:14

标签: java hibernate hashmap

在以下示例中,如何在不加载角色的情况下将角色值保存到id为1的角色?我试过了:

Map user = new HashMap<String,Object>();

user.put("address","Address test");
user.put("role",1);

session.save("User",user);

但结果是:

java.lang.ClassCastException: java.lang.Integer cannot be cast to java.util.Map
    at org.hibernate.property.MapAccessor$MapGetter.get(MapAccessor.java:90)

并且

Map user = new HashMap<String,Object>();

user.put("address","Address test");
user.put("role.id",1);

session.save("User",user);

不保存角色,控制台显示此SQL: Hibernate:插入用户(ts,地址)值(?,?)

非常感谢任何帮助。

3 个答案:

答案 0 :(得分:0)

看起来角色应该是地图

答案 1 :(得分:0)

从我的头脑中,您需要Session在地图模式下工作。我想是这样的:

  SessionFactory sf = ...;
  Session s = sf.openSession();
  Session ds = s.getSession(EntityMode.MAP);

然后按照您的尝试使用ds

答案 2 :(得分:0)

答案是:

Map<String,Object> user = new HashMap<String,Object>();

user.put("address","Address test"); 

user.put("role", session.load("Role",1));

session.save("User",user);

这句话:

session.load("Role",1) 

不会使hibernate命中数据库,并且对id = 1的角色的引用已成功保留在新用户中。