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:找不到预期的辅助表的主要内容,如果未能解决你的问题,请参考以下文章