我有一个表,它有一个复合键(图一),其中一个是引用另一个表的外键(图二)
如何使用 hibernate 映射它???
下面的代码是我编写的代码。但它不起作用。我认为这不是制作这张 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/