О сохранении Hibernate с использованием режима объекта Dynamic-Map - PullRequest
0 голосов
/ 11 марта 2009

В следующем примере как я могу сохранить значение роли в роли с 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, address) значения (?,?)

Любая помощь будет принята с благодарностью.

Ответы [ 3 ]

0 голосов
/ 11 марта 2009

От макушки головы вам понадобится Session, работающий в режиме карты. Я думаю что-то вроде этого:

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

Затем работайте с ds, как вы уже пытались.

0 голосов
/ 03 июня 2009

Ответ:

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 успешно сохраняется у нового пользователя.

0 голосов
/ 11 марта 2009

Похоже, роль должна быть карта

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...