java - 保存中间表时出错

标签 java jpa

我有这个相关实体

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/

相关文章:

java - Array 添加 0 作为第一个元素而不是我的输入 [java]

java - <上下文 :annotation-config> and <context:component-scan>

java - 相当于使用变元而不是构造函数的 NEW 运算符

java - JPA SQL注入(inject)

java - 动态更改持久性单元 - JPA

java - 当我们在类字段上使用 @Autowire 时,它​​是哪种类型的依赖注入(inject)?

java - PreAuthorize ("isAuthenticated()") 不适用于 RestController

java - 使一个物体避开另一物体

java - Hibernate @ManyToMany 类注释配置

java - 如何限制用户在 jpa 列中仅输入特定值?