【问题标题】:Usage @ManyToOne in @EmbeddedId class在 @EmbeddedId 类中使用 @ManyToOne
【发布时间】: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 用复合键创建这个表,或者......不知道。 但我必须做对。 请帮助我。如何正确操作?

【问题讨论】:

    标签: java hibernate


    【解决方案1】:

    正如hibernate documentation 中所述:

    Hibernate 支持在主键类中直接建模@ManyToOne 关联,无论是@EmbeddedId 还是@IdClass

    但是,JPA 规范不支持移植。 在 JPA 术语中,人们会使用“派生标识符”。详情请见Derived Identifiers

    【讨论】:

      猜你喜欢
      • 2012-03-31
      • 1970-01-01
      • 1970-01-01
      • 2016-07-05
      • 1970-01-01
      • 1970-01-01
      • 2012-04-10
      • 2011-11-03
      • 1970-01-01
      相关资源
      最近更新 更多