org.hibernate.AnnotationException:找不到预期的辅助表
Posted
技术标签:
【中文标题】org.hibernate.AnnotationException:找不到预期的辅助表【英文标题】:org.hibernate.AnnotationException: Cannot find the expected secondary table 【发布时间】:2014-08-20 23:32:41 【问题描述】:我在为 Hibernate、Spring、Oracle 数据库(本地创建)配置测试环境时遇到了一些问题。除“sessionFactory”外,所有 bean 通常在启动时初始化。这个异常困扰着我:
Caused by: org.hibernate.AnnotationException: Cannot find the expected secondary table: no MY_INFORMATION available for net.me.business.model.MyInformation
at org.hibernate.cfg.Ejb3Column.getJoin(Ejb3Column.java:358) ~[hibernate-core-3.6.8.Final.jar:3.6.8.Final]
at org.hibernate.cfg.Ejb3Column.getTable(Ejb3Column.java:337) ~[hibernate-core-3.6.8.Final.jar:3.6.8.Final]
at org.hibernate.cfg.Ejb3Column.toString(Ejb3Column.java:621) ~[hibernate-core-3.6.8.Final.jar:3.6.8.Final]
at org.hibernate.cfg.Ejb3Column.bind(Ejb3Column.java:192) ~[hibernate-core-3.6.8.Final.jar:3.6.8.Final]
at org.hibernate.cfg.Ejb3Column.buildColumnFromAnnotation(Ejb3Column.java:473) ~[hibernate-core-3.6.8.Final.jar:3.6.8.Final]
at org.hibernate.cfg.Ejb3Column.buildColumnFromAnnotation(Ejb3Column.java:389) ~[hibernate-core-3.6.8.Final.jar:3.6.8.Final]
at org.hibernate.cfg.ColumnsBuilder.extractMetadata(ColumnsBuilder.java:94) ~[hibernate-core-3.6.8.Final.jar:3.6.8.Final]
at org.hibernate.cfg.AnnotationBinder.processElementAnnotations(AnnotationBinder.java:1495) ~[hibernate-core-3.6.8.Final.jar:3.6.8.Final]
at org.hibernate.cfg.AnnotationBinder.processIdPropertiesIfNotAlready(AnnotationBinder.java:796) ~[hibernate-core-3.6.8.Final.jar:3.6.8.Final]
at org.hibernate.cfg.AnnotationBinder.bindClass(AnnotationBinder.java:707) ~[hibernate-core-3.6.8.Final.jar:3.6.8.Final]
at org.hibernate.cfg.Configuration$MetadataSourceQueue.processAnnotatedClassesQueue(Configuration.java:4035) ~[hibernate-core-3.6.8.Final.jar:3.6.8.Final]
at org.hibernate.cfg.Configuration$MetadataSourceQueue.processMetadata(Configuration.java:3989) ~[hibernate-core-3.6.8.Final.jar:3.6.8.Final]
at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1398) ~[hibernate-core-3.6.8.Final.jar:3.6.8.Final]
at org.hibernate.cfg.Configuration.buildMappings(Configuration.java:1375) ~[hibernate-core-3.6.8.Final.jar:3.6.8.Final]
at org.springframework.orm.hibernate3.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:717) ~[spring-orm-3.1.1.RELEASE.jar:3.1.1.RELEASE]
at org.springframework.orm.hibernate3.AbstractSessionFactoryBean.afterPropertiesSet(AbstractSessionFactoryBean.java:188) ~[spring-orm-3.1.1.RELEASE.jar:3.1.1.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1514) ~[spring-beans-3.1.1.RELEASE.jar:3.1.1.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1452) ~[spring-beans-3.1.1.RELEASE.jar:3.1.1.RELEASE]
这是休眠/弹簧配置:
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"
p:dataSource-ref="dataSource" p:packagesToScan="net.me.business.model" p:hibernateProperties-ref="hibernateProperties" />
<util:properties id="hibernateProperties">
<prop key="hibernate.dialect">org.hibernate.dialect.OracleDialect</prop>
<prop key="hibernate.show_sql">true</prop>
<!--<prop key="hibernate.connection.url">jdbc:h2:mem:test;INIT=create schema if not exists myschema\;SET SCHEMA myschema\;MODE=Oracle;DB_CLOSE_DELAY=-1</prop>-->
<!--<prop key="hibernate.hbm2ddl.auto">update</prop>-->
</util:properties>
我不知道我错过了什么。
这里是 github 仓库。请看:
https://github.com/slavisah/mybusiness.git
README.md中有一些注释
问题 #2
有什么方法可以动态地将相同的序列映射作为 ID 生成器添加到每个表中?无需在每个类中都写注释。序列名称模板为 [tablename]_SEQ。
【问题讨论】:
您需要向我们展示主表和辅助表的模型代码。很明显,你有各种各样的连接发生,它可能是不正确的。 当我使用 JPA 和 persistence.xml 时,在相同的模型类中一切正常。我只是尝试将实现更改为 Hibernate。 您仍然需要发布代码,因为您可能对代码有问题,现阶段这个问题的质量还不够高,人们无法给您准确的答案 你是对的。我只是在构建 git repo 来分享给大家看看 上面我用 git repo github.com/slavisah/mybusiness.git 编辑了我的帖子,所以如果你有时间,请帮忙 【参考方案1】:我已经弄清楚我做错了什么。这两个不在一起:
@Table(name="ADDRESS")
public class Address implements Serializable
@Column(name="MODIFIED_BY",table="ADDRESS",length=100)
@Basic
private String modifiedBy;
@Table(name="ADDRESS")
在课程的开头,@Column(...table="ADDRESS"...)
在每个字段上。此映射由 JPA Modeler netbeans 插件生成。我不会再依赖它了:)
上面的问题 #2 仍有待讨论。
谢谢大家。
【讨论】:
【参考方案2】:目前 JPA Modeler 正在开发中。因此,请使用 JPA Modeler xml 的附件提出您的错误here。 感谢您的贡献!
【讨论】:
以上是关于org.hibernate.AnnotationException:找不到预期的辅助表的主要内容,如果未能解决你的问题,请参考以下文章