Hibernate: маппируем на View
От: server_mouse Беларусь about:blank
Дата: 26.11.07 14:37
Оценка:
Hi All!

Дано:
— Hibernate 3.3
— Postgre
— JPA annotation для описания маппинга

Пытаюсь замапить entity на view в базе данных. Получаю такую ошибку: "Missing table: person_required_doc". Собственно класс:
@Entity
@Table(name = "person_required_doc")
public class RequiredDocumentType implements Serializable {
//....
}


В доке нашёл такую фразу: "There is no difference between a view and a base table for a Hibernate mapping".
В чём могут могут быть грабли???
Повреждение мозга после ректальной биопсии — редкая штука (с) Хаус
Re: Hibernate: маппируем на View
От: Blazkowicz Россия  
Дата: 26.11.07 14:55
Оценка: 2 (1)
Здравствуйте, server_mouse, Вы писали:

_>@Table(name = "person_required_doc")

_>В доке нашёл такую фразу: "There is no difference between a view and a base table for a Hibernate mapping".

Есть Hibеrnate и есть JPA. Надо различать.
В доке по аннотации @Table про view ничего не сказано:
http://java.sun.com/javaee/5/docs/api/javax/persistence/Table.html
Re[2]: Hibernate: маппируем на View
От: server_mouse Беларусь about:blank
Дата: 26.11.07 15:25
Оценка:
Здравствуйте, Blazkowicz, Вы писали:

B>Здравствуйте, server_mouse, Вы писали:


_>>@Table(name = "person_required_doc")

_>>В доке нашёл такую фразу: "There is no difference between a view and a base table for a Hibernate mapping".

B>Есть Hibеrnate и есть JPA. Надо различать.

ОК, возможно парвильнее было сказать "для метаданных использованы EJB3 annotation"... Если своей неудачной фразой нарушил чей-то сон, приношу свои извинения.
B>В доке по аннотации @Table про view ничего не сказано:
B>http://java.sun.com/javaee/5/docs/api/javax/persistence/Table.html
Однако это сказано здесь. Вообще дока по Hibernate annotation выглядит просто как дополнение к основной, описывающей маппинг с помощью XML. По этому во многих вопросах ориентируюсь на неё.
Повреждение мозга после ректальной биопсии — редкая штука (с) Хаус
Re[3]: Hibernate: маппируем на View
От: Blazkowicz Россия  
Дата: 26.11.07 15:38
Оценка:
Здравствуйте, server_mouse, Вы писали:

_>ОК, возможно парвильнее было сказать "для метаданных использованы EJB3 annotation"... Если своей неудачной фразой нарушил чей-то сон, приношу свои извинения.

Тю, блин. Шо вы все такие злые сегодня? Я намекаю на то что аннотации пользовать не есть хороший способ работать с SQL View.
А есть Stacktrace ошибки? Интересно глянуть кто именно обрыгался.
Re[4]: Hibernate: маппируем на View
От: server_mouse Беларусь about:blank
Дата: 26.11.07 16:20
Оценка:
Здравствуйте, Blazkowicz, Вы писали:

B>А есть Stacktrace ошибки? Интересно глянуть кто именно обрыгался.

Обрыгался Hibernate-валидатор. В настройках стоит валидация базы:
<bean id="sessionFactory"
        class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
 <property name="hibernateProperties">
  <props>
   <prop key="hibernate.hbm2ddl.auto">validate</prop>
   .....
   </property>
  <props>
 </bean>


Собственно stack trace такой:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.transaction.interceptor.TransactionAttributeSourceAdvisor': Cannot create inner bean '(inner bean)' of type [org.springframework.transaction.interceptor.TransactionInterceptor] while setting bean property 'transactionInterceptor'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name '(inner bean)': Cannot resolve reference to bean 'transactionManager' while setting bean property 'transactionManager'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'transactionManager' defined in class path resource [stars/application-context.xml]: Cannot resolve reference to bean 'sessionFactory' while setting bean property 'sessionFactory'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in class path resource [stars/application-context.xml]: Invocation of init method failed; nested exception is org.hibernate.HibernateException: Missing table: person_required_doc
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name '(inner bean)': Cannot resolve reference to bean 'transactionManager' while setting bean property 'transactionManager'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'transactionManager' defined in class path resource [stars/application-context.xml]: Cannot resolve reference to bean 'sessionFactory' while setting bean property 'sessionFactory'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in class path resource [stars/application-context.xml]: Invocation of init method failed; nested exception is org.hibernate.HibernateException: Missing table: person_required_doc
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'transactionManager' defined in class path resource [stars/application-context.xml]: Cannot resolve reference to bean 'sessionFactory' while setting bean property 'sessionFactory'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in class path resource [stars/application-context.xml]: Invocation of init method failed; nested exception is org.hibernate.HibernateException: Missing table: person_required_doc
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in class path resource [stars/application-context.xml]: Invocation of init method failed; nested exception is org.hibernate.HibernateException: Missing table: person_required_doc
Caused by: org.hibernate.HibernateException: Missing table: person_required_doc
at org.hibernate.cfg.Configuration.validateSchema(Configuration.java:1080)
at org.hibernate.tool.hbm2ddl.SchemaValidator.validate(SchemaValidator.java:116)
at org.hibernate.impl.SessionFactoryImpl.<init>(SessionFactoryImpl.java:317)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1294)
at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:915)
at org.springframework.orm.hibernate3.LocalSessionFactoryBean.newSessionFactory(LocalSessionFactoryBean.java:805)
at org.springframework.orm.hibernate3.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:745)
at org.springframework.orm.hibernate3.AbstractSessionFactoryBean.afterPropertiesSet(AbstractSessionFactoryBean.java:134)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1201)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1171)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:425)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:251)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:156)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:248)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:160)
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:261)
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:109)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1099)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:861)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:421)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:251)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:156)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:248)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:160)
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:261)
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:109)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1099)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:861)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:421)
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveInnerBean(BeanDefinitionValueResolver.java:215)
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:127)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1099)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:861)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:421)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:251)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:156)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:248)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:160)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:287)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:352)
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:91)
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:75)
at org.gienah.testing.junit.ContextLoader.loadContext(ContextLoader.java:27)
at org.gienah.testing.junit.CacheProvider.registerTestContext(CacheProvider.java:104)
at org.gienah.testing.junit.CacheProvider.getContext(CacheProvider.java:54)
at org.gienah.testing.junit.CacheProvider.getTestDefinition(CacheProvider.java:72)
at org.gienah.testing.junit.SpringRunner$SpringTestClassMethodsRunner.<init>(SpringRunner.java:163)
at org.gienah.testing.junit.SpringRunner$SpringCompositeRunner.<init>(SpringRunner.java:141)
at org.gienah.testing.junit.SpringRunner.<init>(SpringRunner.java:53)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at org.junit.internal.requests.ClassRequest.buildRunner(ClassRequest.java:33)
at org.junit.internal.requests.ClassRequest.getRunner(ClassRequest.java:28)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.<init>(JUnit4TestReference.java:26)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestClassReference.<init>(JUnit4TestClassReference.java:24)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.createTest(JUnit4TestLoader.java:40)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.loadTests(JUnit4TestLoader.java:30)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:445)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)

Повреждение мозга после ректальной биопсии — редкая штука (с) Хаус
Re: Hibernate: маппируем на View
От: server_mouse Беларусь about:blank
Дата: 27.11.07 18:54
Оценка: 8 (1)
Короче нашёл решение.
1. Это известный баг
2. Пока фиксится просто: отключам валидацию нафиг.
Если к примеру поставить
<prop key="hibernate.hbm2ddl.auto">update</prop>

всё будет работать.

Кроме того, как показало детальное изучение сорцов Hibernate можно сделать и так:
<prop key="hibernate.hbm2ddl.auto">Any_trash_string</prop>

В этом случае вообще никакой валидации не происходит.
Повреждение мозга после ректальной биопсии — редкая штука (с) Хаус
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.