如何创建到没有主键的 SQL 表的映射?
Posted
技术标签:
【中文标题】如何创建到没有主键的 SQL 表的映射?【英文标题】:How to create a mapping to a SQL table that has no primary key? 【发布时间】: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 应该会有所帮助。 【参考方案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;
【讨论】:
以上是关于如何创建到没有主键的 SQL 表的映射?的主要内容,如果未能解决你的问题,请参考以下文章