【问题标题】:How to map a composite key and one of them is a foreign key using Hibernate如何映射一个复合键,其中一个是使用 Hibernate 的外键
【发布时间】:2018-04-24 13:31:37
【问题描述】:

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

如何使用 hibernate 进行映射???

下面的代码是我做的代码。但它不工作。我认为这不是制作这张地图的方法。

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 error code:335544351

【问题讨论】:

  • 如果您需要帮助,请将您的代码直接放在问题中,而不是图片链接。
  • 我们可以有完整的CamposObrigatoriosID 课程吗,请?因为您的 ID 似乎很大...

标签: java hibernate jpa


【解决方案1】:

您应该使用“派生身份”。尽管您没有包含 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 节中讨论了派生的身份(带有示例)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-10
    • 2011-03-20
    • 2016-09-18
    • 2016-07-20
    • 2017-08-19
    • 2011-08-10
    相关资源
    最近更新 更多