我有这个相关实体
Entity.java
@Entity
@Table(name = "entity")
public class Entidad extends BaseEntity {
/**
* Serial
*/
private static final long serialVersionUID = 3453805453717178734L;
protected String name;
protected String image;
protected String notes;
@OrderBy("id")
@ManyToMany
protected Set<EntityHeader> headersType = new HashSet<EntityHeader>();
//Getters and setters
}
HeaderType.java
@Entity
@Table(name = "header_type")
public class HeaderType extends BaseEntity {
/**
* Serial
*/
private static final long serialVersionUID = -7471230510640592406L;
private String name;
@OrderBy("id")
@ManyToMany
private Set<EntityHeader> entities = new HashSet<EntityHeader>();
//Getters and setters
}
和中间表EntityHeader.java
@Entity
@Table(name = "entity_header")
public class EntityHeader implements Serializable{
/**
* Serial
*/
private static final long serialVersionUID = 1710372870796468955L;
@Id
@ManyToOne
private Entidad entity;
@Id
@ManyToOne
private HeaderType headerType;
private String value;
//Getters and setters
}
因此,当我想保存一个没有 EntityHeader 数据的实体时,效果很好,但是,如果我尝试设置 EntityHeader 字段并保存它(保存人员或单独保存 EntityHeader 以及具有正确值的 Entity 和 HeadersType),我会收到此消息:
org.hibernate.TypeMismatchException: Provided id of the wrong type for class es.paquete.basicas.entidades.intermedias.EntityHeader. Expected: class es.paquete.basicas.entidades.intermedias.EntityHeader, got class java.lang.Long
编辑:主要类的 ID 在 BaseEntity 中
最佳答案
EntityHeader 上的主键没有意义:
@Id注解
Specifies the primary key of an entity. The field or property to which the Id annotation is applied should be one of the following types: any Java primitive type; any primitive wrapper type; String; java.util.Date; java.sql.Date; java.math.BigDecimal; java.math.BigInteger.
看看http://www.objectdb.com/api/java/jpa/ManyToOne
您需要查看实体的主键,以便它们也可以相互引用。
关于java - 保存中间表时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32310922/