отображение неизменяемых свойств с использованием спящего режима - PullRequest
0 голосов
/ 13 января 2011

Я пытаюсь сопоставить неизменяемое свойство с базовой базой данных, используя hibernate, и вот снимок файла сопоставления для того же

<hibernate-mapping default-access="field">    
<!-- Immutable property -->
            <property name="creationDate" column="CREATIONDATE" type="timestamp"
                update="false" not-null="true" />

Я не объявил ни одного свойства с именем creationDate в моем классе и hibernateжалуется на меня со следующей ошибкой

org.hibernate.HibernateException: Unable to instantiate default tuplizer [org.hibernate.tuple.entity.PojoEntityTuplizer]
    at org.hibernate.tuple.entity.EntityTuplizerFactory.constructTuplizer(EntityTuplizerFactory.java:110)
    at org.hibernate.tuple.entity.EntityTuplizerFactory.constructDefaultTuplizer(EntityTuplizerFactory.java:135)
    at org.hibernate.tuple.entity.EntityEntityModeToTuplizerMapping.<init>(EntityEntityModeToTuplizerMapping.java:80)
    at org.hibernate.tuple.entity.EntityMetamodel.<init>(EntityMetamodel.java:323)
    at org.hibernate.persister.entity.AbstractEntityPersister.<init>(AbstractEntityPersister.java:456)
    at org.hibernate.persister.entity.SingleTableEntityPersister.<init>(SingleTableEntityPersister.java:131)
    at org.hibernate.persister.PersisterFactory.createClassPersister(PersisterFactory.java:84)
    at org.hibernate.impl.SessionFactoryImpl.<init>(SessionFactoryImpl.java:267)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1341)
    at com.raisonne.tr.persistence.HibernateSessionFactory.rebuildSessionFactory(HibernateSessionFactory.java:161)
    at com.raisonne.tr.persistence.HibernateSessionFactory.<clinit>(HibernateSessionFactory.java:72)
    at com.raisonne.tr.dao.impl.GenericDAOImpl.makePersistance(GenericDAOImpl.java:173)
    at com.raisonne.tr.service.impex.impl.DestinationImportServiceImpl.startDestinationImport(DestinationImportServiceImpl.java:130)
    at com.raisonne.tr.backoffice.actions.impex.DestinationImportAction.destinationImport(DestinationImportAction.java:118)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)

Caused by: org.hibernate.PropertyNotFoundException: field [creationDate] not found on com.tr.category.Category
    at org.hibernate.property.DirectPropertyAccessor.getField(DirectPropertyAccessor.java:145)
    at org.hibernate.property.DirectPropertyAccessor.getField(DirectPropertyAccessor.java:137)
    at org.hibernate.property.DirectPropertyAccessor.getGetter(DirectPropertyAccessor.java:160)
    at org.hibernate.mapping.Property.getGetter(Property.java:294)
    at org.hibernate.tuple.entity.PojoEntityTuplizer.buildPropertyGetter(PojoEntityTuplizer.java:300)
    at org.hibernate.tuple.entity.AbstractEntityTuplizer.<init>(AbstractEntityTuplizer.java:141)
    at org.hibernate.tuple.entity.PojoEntityTuplizer.<init>(PojoEntityTuplizer.java:78)

Я следовал за приложением caveatemptor в Hibernate. Мне даже не удалось увидеть какое-либо свойство с датой создания имени в соответствующем классе в caveatemptor (особенно для creatiodate).* Я просто думаю, как наилучшим образом мы можем отобразить такие свойства, используя hiberntae.

Заранее спасибо

1 Ответ

1 голос
/ 13 января 2011

Основываясь на комментариях к вопросу: я бы сказал, что у вас должно быть private Date createdDate = new Date() в вашем классе Java, без установщика (только получатель). Таким образом, вы (и Hibernate) по-прежнему имеете доступ к нему, но потребители этой сущности не могут изменять это значение.

Но если вы действительно не хотите этого в своем классе Java, вам просто нужно удалить его из своего отображения (и использовать функции базы данных для заполнения этого поля, например, триггеры). Эта ошибка вызвана тем, что вы сопоставили столбец базы данных, но в классе Java такого свойства нет. Простое удаление этого из вашего отображения должно подавить исключение.

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