[英]Composite Key when a key is a class
我正在嘗試在JPA上創建一個復合鍵,其中一個鍵是一個類,另一個是枚舉。
但是它給出了以下錯誤:
Caused by: org.hibernate.MappingException: Could not determine type for: br.com.model.Restaurante, at table: ImagemRestaurante, for columns: [org.hibernate.mapping.Column(restaurante)]
ImagemRestaurante.java
@Entity
@IdClass(ImagemRestauranteId.class)
public class ImagemRestaurante implements Serializable {
private static final long serialVersionUID = -4650712996667906167L;
@Id
@JoinColumn(name="idRestaurante")
private Restaurante restaurante;
@Id
@Enumerated(EnumType.ORDINAL)
private TipoImagemRestaurante tipoImagemRestaurante;
private String nome;
private String formato;
private Long tamanho;
private Integer altura;
private Integer largura;
@Transient
private String caminho;
@Transient
private String caminhoHTML;
public ImagemRestaurante() {
}
// Get Sets
}
ImagemRestauranteId.java
public class ImagemRestauranteId implements Serializable {
private static final long serialVersionUID = -6216145537667024048L;
private Restaurante restaurante;
private TipoImagemRestaurante tipoImagemRestaurante;
public ImagemRestauranteId() {
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if ( ! (obj instanceof ImagemRestauranteId ) ) {
return false;
}
ImagemRestauranteId imaId = (ImagemRestauranteId) obj;
return (imaId.restaurante == restaurante) &&
(imaId.tipoImagemRestaurante == tipoImagemRestaurante);
}
@Override
public int hashCode() {
return restaurante.hashCode() + tipoImagemRestaurante.hashCode();
}
// Get Sets
}
Restaurante.java
@Entity
public class Restaurante {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long idRestaurante;
private String nmRestaurante;
private String dsRestaurante;
@OneToOne
private Telefone telefone;
@OneToOne
private Endereco endereco;
private Boolean permitirComentario;
private Boolean permitirNota;
@ManyToOne
private Usuario usuario;
public Restaurante() {
}
// Get Sets
}
添加@ManyToOne
映射到與Restaurante
關系
@Id @ManyToOne @JoinColumn(name="idRestaurante") private Restaurante restaurante;
ImagemRestaurante實例的存在取決於Restaurante實例的存在。 這就是為什么JPA規范將Restaurante稱為ImagemRestaurante的父對象
如果實體中的Id屬性與父實體存在多對一或一對一關系,則id類中的對應屬性必須與父類的id類或嵌入式id具有相同的Java類型實體(如果父實體具有組合主鍵)或父實體的Id屬性的類型(如果父實體具有簡單主鍵)。
private Restaurante restaurante;
到private Long restaurante;
在ImagemRestauranteId
類中。 作為IdClass的ImagemRestauranteId必須僅保留對Restaurante的PK引用。 JPA規范中的以下詞語適用 簡單主鍵或復合主鍵的字段或屬性應為以下類型之一:任何Java原語類型; 任何原始包裝器類型; java.lang.String中; java.util.Date; java.sql.Date; java.math.BigDecimal的; java.math.BigInteger 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.