当前位置: 首页 > 知识库问答 >
问题:

Hibernate无法创建唯一键约束

澹台文博
2023-03-14

我有一个使用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个答案

车胤运
2023-03-14

您很可能在UniqueKey的定义中输入了错误,因为在数据库中找不到约束应该应用的列(我假设数据库是由hibernate构造的)。

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

闾丘成双
2023-03-14

确保使用数据库级别的列名作为@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;
}
 类似资料:
  • 我正在创建一个简单的实体,并试图将它持久化到Oracle数据库中。这是我的天赋: 这是我的Java类,它创建了这个实体的一个实例,并使用HiberNate将其保存到数据库中: 当我运行这个程序时,我得到一个异常: 请帮助我在此代码中犯错误的地方。我正在使用 更新:这是我的Hibernate配置文件,表由Hibernate本身生成: 另外,如果可能的话,请给我推荐一个Hibernate-4.3的好资

  • 我在创建mysql数据库中现有表的外键时遇到了一些问题。 我不想创建一个名为的新表来引用它,使用以下方法: 但我发现了错误: 为了获得更多的信息,我做了: 在我看来,这两个列的类型似乎是匹配的,因为它们都是varchar(45)。(我还尝试将列设置为not null,但这没有解决问题)所以我猜问题一定是。但我不太清楚这意味着什么,也不知道如何检查/修复它。有人有什么建议吗?是什么意思?

  • 我有以下问题,我有一个已经存在的表,有三个字段field1,field2,field3。Field1实际上是另一个表的外键(@OneToOne)。所有字段2和字段3都可以为空,所以我不能为所有三个字段设置主键。在数据库中,field1 field2 field3有一个唯一约束。 我用JPA/Hibernate尝试了几种解决方案,但没有找到一个好的。如果不定义@Id,JPA当然无法工作。在@Embe

  • 问题内容: 我有一个具有这种布局的表: 我想创建一个类似于以下的唯一约束: 但是,这将允许多行具有相同的if 。我想允许在存储不具有关联菜单中的最爱,但我只希望每个用户/食谱对这些行中最多只有一个。 到目前为止,我的想法是: 使用一些硬编码的UUID(例如全零)而不是null。 但是,每个用户的菜单都有FK约束,因此我不得不为每个用户创建一个特殊的“空”菜单,这很麻烦。 而是使用触发器检查是否存在

  • 表a已成功创建... 错误1215(HY000):无法添加外键约束 无法创建表b

  • 一天中的好时光!我在使用Hibernate创建多对多关系时遇到一些问题。它在联接表中创建唯一约束: “uk_bapa98k9j6y66sqniad6k680l”唯一约束,btree(用户id) 因此,我只能在此表中为特定用户设置一行,尝试插入具有相同user_id的另一行会导致错误: 错误组织。冬眠发动机jdbc。spi。SqlExceptionHelper-错误:重复的键值违反了唯一约束“uk_