提问者:小点点

Hibernate无法创建唯一键约束


我有一个使用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:无法创建唯一键约束和无法创建唯一键约束,但是它们没有解决我的问题。

有什么办法解决这个问题吗?


共2个答案

匿名用户

确保使用数据库级别的列名作为@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构造的)。

注意,在指定唯一键约束时,必须使用列名,而不是属性名。