Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 保存中间表时出错_Java_Jpa - Fatal编程技术网

Java 保存中间表时出错

Java 保存中间表时出错,java,jpa,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 im

我有这个相关的实体

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
}
@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
}
@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

}
@Entity
@Table(name = "entity")
public class Entidad extends BaseEntity {

    /**
    * Serial
    */
    private static final long serialVersionUID = 3453805453717178734L;

    @Id
    //@GeneratedValue(strategy= GenerationType.TABLE) -- this annotations enables automatic generation for table ids
    protected Long id;

    protected String name;

    protected String image;

    protected String notes;

    @OrderBy("id")
    @OneToMany(mappedBy = "entity")
    protected Set<EntityHeader> headersType = new HashSet<EntityHeader>();

    //Getters and setters
}
@Entity
@Table(name = "header_type")
public class HeaderType extends AbstractBasicEntity {

    /**
     * Serial
     */
    private static final long serialVersionUID = -7471230510640592406L;

    @Id
    //@GeneratedValue(strategy= GenerationType.TABLE) -- this annotations enables automatic generation for table ids
    protected Long id;

    private String name;

    @OrderBy("id")
    @OneToMany(mappedBy = "headerType")
    private Set<EntityHeader> entities = new HashSet<EntityHeader>();

    //Getters and setters
}
@Entity
@Table(name = "entity_header")
public class EntityHeader implements Serializable{

    /**
     * Serial
     */
    private static final long serialVersionUID = 1710372870796468955L;

    @Id
    private Long id;

    @ManyToOne
    @JoinColumn
    private Entidad entity;

    @ManyToOne
    @JoinColumn
    private HeaderType headerType;

    private String value;

    //Getters and setters
}
因此,当我想保存一个没有EntityHeader数据的实体时,它会做得很好,但是,如果我尝试设置EntityHeader字段并保存它(保存person或单独保存EntityHeader并使用Entity和HeadersType的正确值),我会得到以下消息:

org.hibernate.TypeMismatchException:为提供的id类型错误 类es.paquete.basicas.entidades.intermedias.EntityHeader。预期: 类es.paquete.basicas.entidades.intermedias.EntityHeader,获得类 java.lang.Long


编辑:主要类的ID在BaseEntity中

EntityHeader上的主键没有意义:

@Id注释

指定实体的主键。指向的字段或属性 应用的Id注释应为以下类型之一:任意 Java原语类型;任何原始包装类型;一串 java.util.Date;java.sql.Date;java.math.BigDecimal; java.math.biginger

看看


您需要查看实体的主键,以便它们也可以相互引用。

我认为,要使这些实体正常工作,必须解决一些问题:

  • 每个实体必须有自己的@Id字段
  • 感觉“很多关系”都不合适;实际上,每个EntityHeader和每个HeaderType都与它们的EntityHeader有一对多的关系
我认为你们的课程应该是这样的:

Entidad.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
}
@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
}
@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

}
@Entity
@Table(name = "entity")
public class Entidad extends BaseEntity {

    /**
    * Serial
    */
    private static final long serialVersionUID = 3453805453717178734L;

    @Id
    //@GeneratedValue(strategy= GenerationType.TABLE) -- this annotations enables automatic generation for table ids
    protected Long id;

    protected String name;

    protected String image;

    protected String notes;

    @OrderBy("id")
    @OneToMany(mappedBy = "entity")
    protected Set<EntityHeader> headersType = new HashSet<EntityHeader>();

    //Getters and setters
}
@Entity
@Table(name = "header_type")
public class HeaderType extends AbstractBasicEntity {

    /**
     * Serial
     */
    private static final long serialVersionUID = -7471230510640592406L;

    @Id
    //@GeneratedValue(strategy= GenerationType.TABLE) -- this annotations enables automatic generation for table ids
    protected Long id;

    private String name;

    @OrderBy("id")
    @OneToMany(mappedBy = "headerType")
    private Set<EntityHeader> entities = new HashSet<EntityHeader>();

    //Getters and setters
}
@Entity
@Table(name = "entity_header")
public class EntityHeader implements Serializable{

    /**
     * Serial
     */
    private static final long serialVersionUID = 1710372870796468955L;

    @Id
    private Long id;

    @ManyToOne
    @JoinColumn
    private Entidad entity;

    @ManyToOne
    @JoinColumn
    private HeaderType headerType;

    private String value;

    //Getters and setters
}
这个解决方案需要改进,但我希望它能帮助您走上正确的道路


PS:如果我犯了任何英文错误,很抱歉。

多个Id字段意味着您需要定义一个IdClass。实际上,HeaderType和Entidad都有一个Id,该字段位于BaseEntity@Kratul我曾经想象过这样的事情,但我只是想确定id是否存在于每个相关实体中