Обновление до Hibernate 4.x default_entity_mode=исключение динамической картыJAVA

Программисты JAVA общаются здесь
Anonymous
Обновление до Hibernate 4.x default_entity_mode=исключение динамической карты

Сообщение Anonymous »

Я пытаюсь обновить спящий режим с 3.6.10 до 4.3.11, но столкнулся с множеством проблем. Во-первых, в hibernate 3.x была сессия EntityMode, что-то в этом роде:

Код: Выделить всё

Session session = sessionFactory.openSession().getSession(EntityMode.MAP);
но поддержка сеанса в режиме объекта была удалена в hibernate-4.x (см. EntityMode.Map с Hibernate 4.2.6+ Spring 3.2). В версии 4.x решение состоит в том, чтобы настроить пользовательский SessionFactory с помощью hibernate.default_entity_mode=dynamic-map, но в моем случае это не работает - я получаю исключение:

Код: Выделить всё

org.hibernate.PropertyAccessException:  IllegalArgumentException occurred calling getter of test.moro.User.name
at org.hibernate.property.BasicPropertyAccessor$BasicGetter.get(BasicPropertyAccessor.java:192)
at org.hibernate.property.BasicPropertyAccessor$BasicGetter.getForInsert(BasicPropertyAccessor.java:204)
at org.hibernate.tuple.entity.AbstractEntityTuplizer.getPropertyValuesToInsert(AbstractEntityTuplizer.java:624)
at org.hibernate.tuple.entity.PojoEntityTuplizer.getPropertyValuesToInsert(PojoEntityTuplizer.java:382)
at org.hibernate.persister.entity.AbstractEntityPersister.getPropertyValuesToInsert(AbstractEntityPersister.java:4817)
at org.hibernate.event.internal.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:268)
at org.hibernate.event.internal.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:195)
at org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:126)
at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:209)
at org.hibernate.event.internal.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:55)
at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:194)
at org.hibernate.event.internal.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:49)
at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:90)
at org.hibernate.internal.SessionImpl.fireSave(SessionImpl.java:715)
at org.hibernate.internal.SessionImpl.save(SessionImpl.java:707)
at test.moro.HibernateDynamicMapTest.test_1(HibernateDynamicMapTest.java:34)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:78)
at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:212)
at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:68)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:140)
Я настроил пример проекта, пытаясь выяснить, в чем проблема.
Моя конфигурация спящего режима (test.hibernate.cfg.xml):

Код: Выделить всё


org.h2.Driver
sa
jdbc:h2:./target/test
sa
org.hibernate.dialect.H2Dialect
update
dynamic-map

true




Файл сопоставления User.hbm.xml: Сущность:

Код: Выделить всё

public class User  implements Serializable {
private long id;
private String name;
private String password;

public long getId() {
return id;
}

public void setId(long id) {
this.id = id;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String getPassword() {
return password;
}

public void setPassword(String password) {
this.password = password;
}
}
И тестовый класс, который запускает код:

Код: Выделить всё

public class HibernateDynamicMapTest {

@Test
public void test_1() {
Configuration configuration = new Configuration();
configuration.configure("/test.hibernate.cfg.xml");
StandardServiceRegistryBuilder builder = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties());
SessionFactory sessionFactory = configuration.buildSessionFactory(builder.build());
//------------------------------

Session session = sessionFactory.openSession();
session.beginTransaction();
Map insertMap = new HashMap();
insertMap.put("name", "User_1");
insertMap.put("password", "mypassword");
session.save("user", insertMap);
session.getTransaction().commit();
session.close();
sessionFactory.close();
}
}
Пожалуйста, помогите мне исправить эту ошибку.
P.S.
Я заметил, что если я удалю name="test. moro.User" из сопоставления классов он ​​работает, но мне нужно сохранить имя класса, поскольку оно используется для сопоставления hbm с объектами Java.

Подробнее здесь: https://stackoverflow.com/questions/407 ... -exception

Вернуться в «JAVA»