當我運行我的專案時,Hibernate 會自動創建名稱錯誤的表。我有兩個表 User 和 Role 以及三個類:抽象類 IdField.java:
@Entity
public abstract class IdField {
@Id @GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id")
private Long id;
//constructors and getters setters
User.java 類:
@Entity
@Table(name = "user", schema = "quiz_app")
public class User extends IdField{
@Column(name = "user_name")
private String userName;
@Column(name = "password")
private String password;
@Column(name = "first_name")
private String firstName;
@Column(name = "last_name")
private String lastName;
@Column(name = "email")
private String email;
@ManyToMany(fetch = FetchType.EAGER)
private Collection<Role> roles = new ArrayList<>();
//constructors and getters setters
和 Role.java 類:
@Entity
@Table(name = "role", schema = "quiz_app")
public class Role extends IdField{
@Enumerated(EnumType.ORDINAL)
@Column(name = "role_name")
private RoleName roleName;
//constructors and getters setters
并且 Hibernate 創建了兩個名稱錯誤的表 id_field 和 id_field_roles:

但我想要表名,因為它在@Table 注釋中,如“用戶”和“角色”
uj5u.com熱心網友回復:
熟悉繼承策略:
https://thorben-janssen.com/complete-guide-inheritance-strategies-jpa-hibernate/
在我看來你正在尋找@MappedSuperclass
如果您只想在物體之間共享狀態和映射資訊,映射超類策略非常適合且易于實作。你只需要設定你的繼承結構,注釋所有屬性的映射資訊并將@MappedSuperclass 注釋添加到你的超類中。如果沒有@MappedSuperclass 注解,Hibernate 將忽略你的超類的映射資訊。
最重要的是:如果你的共享部分只是 id 欄位,顧名思義,繼承看起來有點矯枉過正。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/337006.html
上一篇:OracleCLOB欄位中的空CLOB而不是NULL
下一篇:休眠@ManyToMany堅持
