【发布时间】:2021-09-09 05:21:12
【问题描述】:
Java 持久性 2.1。第 2.5 章说:
可嵌入类可能包含与实体或实体集合的关系。由于可嵌入类的实例本身没有持久标识,因此来自被引用实体的关系是与包含可嵌入实例的实体的关系,而不是与可嵌入对象本身的关系。 用作嵌入 id 或映射键的可嵌入类不得包含此类关系。
我建立了这种关系,一切正常。请告诉我为什么不能这样做?
我的可嵌入类AuthorizationHistorySssPropertyPK:
@Embeddable
@Data
@NoArgsConstructor
@AllArgsConstructor
public class AuthorizationHistorySssPropertyPK implements Serializable {
@ManyToOne
@JoinColumn(name = "applicationSss", referencedColumnName = "sss", nullable = false)
private Sss sss;
@Column(name = "dataTime", nullable = false)
private Timestamp dataTime;
}
我的班级AuthorizationHistory 和@EmbeddedId:
@Entity
@Table(name = "`AuthorizationHistory`")
@Data
@NoArgsConstructor
public class AuthorizationHistory {
@EmbeddedId
private AuthorizationHistorySssPropertyPK authorizationHistorySssPropertyPK;
@Column(name = "login", nullable = false)
private String login;
@Column(name = "password", nullable = false)
private String password;
@Column(name = "status", nullable = false)
private byte status;
public AuthorizationHistory(Sss sss, String login, String password, Timestamp timestamp, byte status) {
this.authorizationHistorySssPropertyPK = new AuthorizationHistorySssPropertyPK(sss,timestamp);
this.login = login;
this.password = password;
this.status = status;
}
}
还有班级Sss:
@Entity
@Table(name = "`SSS`")
@Data
@NoArgsConstructor
public class Sss {
@Id
@Column(name = "sss", nullable = false)
private int sss;
// .....
}
数据库是很久以前创建的,我无法更改它。
但是表AuthorizationHistory 没有字段ID。
我需要用 Hibernate 用复合键创建这个表,或者......不知道。
但我必须做对。
请帮助我。如何正确操作?
【问题讨论】: