java - 如何使用 Hibernate 映射复合键且其中之一是外键

标签 java hibernate jpa

我有一个表,它有一个复合键(图一),其中一个是引用另一个表的外键(图二)

如何使用 hibernate 映射它???

enter image description here

enter image description here

下面的代码是我编写的代码。但它不起作用。我认为这不是制作这张 map 的方法。

CamposObrigatoriosID 类是具有

的类
@Embeddable
public class CamposObrigatoriosID implements Serializable {

    private static final long serialVersionUID = 1L;


    @Column(name=“PERFIL_CMPOBR”)
    private Long perfil;    
    @Column(name=“ORDEM”)
    private Long ordem;
   @Column(name=“NOMETABELA”)
    private String nomeTabela;public Long getPerfil() {
        return perfil;
    }
...

    @Override
    public boolean equals(Object arg0) {
        if(arg0 instanceof CamposObrigatoriosID) {
            CamposObrigatoriosID that = (CamposObrigatoriosID) arg0;
            return this.perfil.equals(that.perfil) && this.ordem.equals(that.ordem) && this.nomeTabela.equals(that.nomeTabela);
        }
        return false;
    }
    @Override
    public int hashCode() {
        // TODO Auto-generated method stub
        return perfil.hashCode() + ordem.hashCode() + nomeTabela.hashCode();
    }
<小时/>
@Embeddable
public class CamposObrigatoriosID implements Serializable {

    private static final long serialVersionUID = 1L;


    @Column(name=“PERFIL_CMPOBR”)
    private Long perfil;    
    @Column(name=“ORDEM”)
    private Long ordem;
   @Column(name=“NOMETABELA”)
    private String nomeTabela;
    .....
<小时/>
@Entity
@Table(name=“USUARIO_PERFIL”)
public class UsuarioPerfil {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name=“CODIGO_USRPERFIL”)
    private Long id;

    @Column(name=“DESCRICAO_USRPERFIL”)
    private String desccricaoUsrPerfil;
    ...
<小时/>

错误:SQLState:42000,ISC错误代码:335544351

最佳答案

您应该使用“派生身份”。虽然您没有包含 CamposObrigatorios 的代码,但我猜它应该如下所示:

@Entity
@Table(name = "CAMPOS_OBRIGATORIOS")
public class CamposObrigatorios {

    @EmbeddedId
    private CamposObrigatoriosID id;

    @ManyToOne
    @JoinColumn(name = "PERFIL_CMPOBR", referencedColumnName = "CODIGO_USRPERFIL")
    @MapsId("perfil") // maps 'perfil' attribute of embedded id
    private UsuarioPerfil usuarioPerfil;

    ...
}

JPA 2.1 规范的第 2.4.1 节讨论了派生身份(并附有示例)。

关于java - 如何使用 Hibernate 映射复合键且其中之一是外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50002998/

相关文章:

java - 实体位于多个 JAR 文件中时的 JPA/Hibernate 映射错误

java - 如何调试 web 应用程序中的 jar

java - 我可以获取任何其他浏览器窗口的 URL 吗?

mysql - 如何修复 "Coult not find Id property. Be sure the accessor method name matches the veriable name"错误

java - apache commons dbcp 连接池错误 : Timeout waiting for idle object in a Spring + Hibernate app using Spring Transactions

java - 考虑在您的配置中定义类型为 'com.gisapp.gisapp.dao.IUserDAO' 的 bean

java - 如何判断2张 table 的情况

java - 如何从 4 个 Excel 工作表中用 Java 数据创建单个数据库表?

java - 子实体的替代 key 类型

java - 指定是否延迟加载 Spring Data