我有一个使用Hibernate访问数据库的应用程序。它会抛出如下错误:
组织Spring框架清洁工厂。BeanCreationException:创建URL[文件:/C:/Program Files(x86)/XXX/applicationContext.xml]中定义的名为“sessionFactory”的bean时出错:初始化方法调用失败;嵌套异常是org.hibernate。AnnotationException:无法在表table:column1,在org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521)的org.springfframework.bean.factory.support.Abstract AutowireCapbleBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:521)中找不到column2(AbstractAutowireCapableBeanFactory.java:458),网址为org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(Abstract BeanFactory.java.295),网址:org.springfframework.bean.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingleton BeanRegistry.java:223),网址org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198),位于org.springfframework.bean.factory.support.DefaultListableBeanFactory.get Bean(DefaultListableBeanFactory.java:273),位于java.awt.event.InvocationEvent。dispatch(未知源)位于java.awt.EventQueue。dispatchEventImpl(未知源)位于java.awt.EventQueue。在java.awt.EventQueue$2.run(未知源)在java.awt.EventQueue$2.run(未知来源)在java.security.AccessController。java.security.AccessControlContext$1.doIntersectionPrivilege(未知源)位于java.awt.EventQueue。dispatchEvent(未知源)位于java.awt.EventDispatchThread。pumpOneEventForFilters(未知源)位于java.awt.EventDispatchThread。位于java.awt.EventDispatchThread的pumpEventsForFilter(未知源)。位于java.awt.EventDispatchThread的pumpEventsForHierarchy(未知源)。位于java.awt.EventDispatchThread的pumpEvents(未知源)。位于java.awt.EventDispatchThread的pumpEvents(未知源)。run(未知源)由:org.hibernate引起。AnnotationException:无法在表table:column1,在org.springframework.org.hibernate3.LocalSessionFactoryBean.buildSessionFactory的org.hibernate.cfg.AnnotationConfiguration.buildUniqueKeyFromColumnNames(AnnotationConfiguration.java:616)的org.hibernate.cfg.AnotationConfiguration.secondPassCompile(AnnotatonConfiguration.java:348)中找不到column2位于org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean的org.springfframework.orm.hibernate3.AbstractSessionFactoryBean.afterPropertiesSet(AbstractSession FactoryBean.java:188)上的(LocalSessionFactoryBean:720)(AbstractAutowireCapableBeanFactory.java:1479)…27更多
我检查了这个问题:org . hibernate . annotation exception:无法创建唯一键约束和无法创建唯一键约束,但是它们没有解决我的问题。
有什么办法解决这个问题吗?
确保使用数据库级别的列名作为@UniqueConstraint的列名属性。例如,对于简单类型,数据库级别的列名可能与实体级别的属性名称相同,但关系属性通常不是这种情况。例如
@Table(name = "persons",
uniqueConstraints = {
@UniqueConstraint(columnNames = {"number", "person_type" ,"company_id"})
})
public abstract class Person extends BaseEntity implements ActorProfile {
@Column(name = "zpa_number")
private String zpaNumber;
@Column(name = "number")
private Long number;
@Column(name = "person_type")
private String personType;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "company_id")
private Company company;
}
您很可能在UniqueKey的定义中输入了错误,因为在数据库中找不到约束应该应用的列(我假设数据库是由hibernate构造的)。
注意,在指定唯一键约束时,必须使用列名,而不是属性名。