【问题标题】:How to create a mapping to a SQL table that has no primary key?如何创建到没有主键的 SQL 表的映射?
【发布时间】:2020-11-13 03:50:00
【问题描述】:

我有一个没有主键的表。它需要一个 @ID 注释,如果没有它,将引发以下错误:

Caused by: org.hibernate.AnnotationException: No identifier specified for entity: 
overall.model.Overall
    at org.hibernate.cfg.InheritanceState.determineDefaultAccessType(InheritanceState.java:266) ~[hibernate-core-5.4.17.Final.jar:5.4.17.Final]
    at org.hibernate.cfg.InheritanceState.getElementsToProcess(InheritanceState.java:211) ~[hibernate-core-5.4.17.Final.jar:5.4.17.Final]
    at org.hibernate.cfg.AnnotationBinder.bindClass(AnnotationBinder.java:781) ~[hibernate-core-5.4.17.Final.jar:5.4.17.Final]

我已经尝试在 JDBC 模板中实现以及使用 JPA,但我无法在没有 @ID 注释的情况下创建任何实体。

该表具有字符串类型的所有字段。您能否就如何将表配置为没有主键提出建议?

我正在使用spring-boot

【问题讨论】:

  • This 应该会有所帮助。

标签: java sql spring-boot spring-data-jpa spring-jdbc


【解决方案1】:

由于表根本没有主键,请使用以下解决方法:创建一个 复合主键,由 所有 列组成。我希望他们不会太多。例如:

@Entity
@IdClass(UserNRole.InnerIdClass.class)
@Table(name = "users_n_roles")
public class UserNRole {
    @Id
    @Column(name = "user_id")
    private Integer userId;

    @Id
    @Column(name = "role_id")
    private Integer roleId;
 
    // getters, setters and constructor . . .
 
    public static class InnerIdClass implements Serializable {
        private Integer userId;
        private Integer roleId;
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多