org.hibernate.AnnotationException: @org.hibernate.annotations.Table references an unknown table:

今天在开发的项目模块中,利用hibernate自动创建表时报org.hibernate.AnnotationException: @org.hibernate.annotations.Table references an unknown table: 原因是注解类用了@org.hibernate.annotations.Table,如下所示:(Hibernat 版本为3.6.0.Final)

</pre><span style="color:#cc7832;"></span><pre name="code" class="java">
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import org.hibernate.annotations.Index;
import org.hibernate.annotations.Table
@Entity
@Table(appliesTo = "WJ_PERSION", indexes = {
    @Index(name = "IDX_WJ_PN_ID", columnNames = {
      "BASE_RES_ID"
    })
  })
@Inheritance(strategy = InheritanceType.JOINED)
public class Persion extends BaseResource {

private String name;
...
 }

后来通过google查询原因,是因为在Hibernate创建表的源码中需要@Table的“appliesTo”的值与@Entity的“name”能够匹配上,不然就会抛出org.hibernate.AnnotationException:的异常:Hibernate中的源码如下;

public void processComplementaryTableDefinitions(org.hibernate.annotations.Table table) {
		//comment and index are processed here
		if ( table == null ) return;
		String appliedTable = table.appliesTo();
		Iterator tables = persistentClass.getTableClosureIterator();
		Table hibTable = null;
		while ( tables.hasNext() ) {
			Table pcTable = (Table) tables.next();
// -=> Here the quoted name is compared to the unquoted name from "appliedTable"
			if ( pcTable.getQuotedName().equals( appliedTable ) ) {
				//we are in the correct table to find columns
				hibTable = pcTable;
				break;
			}
			hibTable = null;
		}
		if ( hibTable == null ) {
			//maybe a join/secondary table
			for ( Join join : secondaryTables.values() ) {
				if ( join.getTable().getQuotedName().equals( appliedTable ) ) {
					hibTable = join.getTable();
					break;
				}
			}
		}
		if ( hibTable == null ) {
			throw new AnnotationException(
					"@org.hibernate.annotations.Table references an unknown table: " + appliedTable
			);
		}
		if ( !BinderHelper.isEmptyAnnotationValue( table.comment() ) ) hibTable.setComment( table.comment() );
		TableBinder.addIndexes( hibTable, table.indexes(), mappings );
	}

具体描述可参考:https://hibernate.atlassian.net/browse/HHH-6328

如上可将注解部分的代码的@Entity中添加name属性并与@Table中的appliesTo属性保存一致。

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import org.hibernate.annotations.Index;
import org.hibernate.annotations.Table
<span style="color:#FF0000;">@Entity(name="WJ_PERSION")</span>
@Table(appliesTo = "<span style="color:#FF0000;">WJ_PERSION</span>", indexes = {
    @Index(name = "IDX_WJ_PN_ID", columnNames = {
      "BASE_RES_ID"
    })
  })
@Inheritance(strategy = InheritanceType.JOINED)
public class Persion extends BaseResource {

private String name;
...
 }


  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值