mysql - Hibernate 一对多,我不想使用多个实体的主键

标签 mysql spring hibernate primary-key

我想使用表格格式

表“帐户”

CREATE TABLE `account` (
    `id` bigint(20) NOT NULL AUTO_INCREMENT,
    PRIMARY KEY (`id`)
)

表“Account_options”

CREATE TABLE `account_options` (
    account_id bigint(20) NOT NULL,
    name varchar(50) NOT NULL,
    value varchar(255) NOT NULL,
    KEY `A` (`account_id`)
    CONSTRAINT `A` FOREIGN KEY (`account_id`) REFERENCES `account` (`id`)

)

这就是我想使用帐户可选变量的原因。

这个可选变量不需要主键。

然后来源

@Entity
@Table ( name = "account" )
public class Account {

    @Id
    @GeneratedValue ( strategy = GenerationType.AUTO )
    private long    id;

    @OneToMany( cascade = { CascadeType.ALL } )
    @JoinColumn( name = "account_id" )
    private List<AccountOption> options = new ArrayList<AccountOption>();
}

@Entity
@Table ( name = "account_options" )
public class AccountOption {

    @ManyToOne( cascade = { CascadeType.ALL } )
    @JoinColumn( name = "account_id" )
    private Account account;

    @Column ( length = 50 )
    private String name;

    @Column ( length = 255 )
    private String value;

}

但是这个源崩溃了;

Caused by: org.hibernate.AnnotationException: No identifier specified for entity: test.domain.AccountOption
    at org.hibernate.cfg.InheritanceState.determineDefaultAccessType(InheritanceState.java:272)
    at org.hibernate.cfg.InheritanceState.getElementsToProcess(InheritanceState.java:227)
    at org.hibernate.cfg.AnnotationBinder.bindClass(AnnotationBinder.java:712)
    at org.hibernate.cfg.AnnotationConfiguration.processArtifactsOfType(AnnotationConfiguration.java:636)
    at org.hibernate.cfg.AnnotationConfiguration.secondPassCompile(AnnotationConfiguration.java:359)
    at org.hibernate.cfg.Configuration.buildMappings(Configuration.java:1206)
    at org.springframework.orm.hibernate3.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:717)
    at org.springframework.orm.hibernate3.AbstractSessionFactoryBean.afterPropertiesSet(AbstractSessionFactoryBean.java:211)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1477)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1417)
    ... 34 more

我不知道为什么需要在这个表上使用主键。

如何解决这个问题?

最佳答案

在该表上创建主键。

Hibernate 需要主键。时期。感叹号。

来自 Hibernate 文档:

“映射类必须声明数据库表的主键列。”

引用号:https://docs.jboss.org/hibernate/core/4.3/manual/en-US/html/ch05.html#mapping-declaration-id

<小时/>

我们可以继续讨论为什么 Hibernate 需要声明主键,我们也可以继续讨论您想要什么。但在讨论结束时,最终,它归结为简单的:Hibernate 需要该表上的主键。

关于mysql - Hibernate 一对多,我不想使用多个实体的主键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25578417/

相关文章:

java - Spring Boot App 注册 RequestContextListener 失败

java - Tomcat:已添加其他 JAR - 上下文重新加载

java - Hibernate 分离延迟加载关系

mysql - Spring DAO rewritebatchedstatements 不适用于具有嵌入 ID 的实体上的 SaveAll()

java - Hibernate Session/EntityManager 在压力测试中关闭

php - "Parse error: syntax error, unexpected T_STRING"与远程服务器一起使用时,会被抛出到之前工作的代码中。为什么?

php - 在 PHP 中使用 $row[$variable] 和 LEFT JOIN 时出现空结果

mysql - SQL:我需要选择连续日期中 3 行相同的位置

java - 尽管数据在数据库中,查询未返回结果

php - 制定一个类似 cron 的时间表