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
扩展AbstractAuditable(Spring数据)会在多通关系上导致org.hibernate.MappingException_Hibernate_Jpa_Spring Data - Fatal编程技术网

扩展AbstractAuditable(Spring数据)会在多通关系上导致org.hibernate.MappingException

扩展AbstractAuditable(Spring数据)会在多通关系上导致org.hibernate.MappingException,hibernate,jpa,spring-data,Hibernate,Jpa,Spring Data,我试图用JPA2和Hibernate作为提供者映射我的实体,但不幸的是,我有一个例外,可能有几个人知道,但即使在web上查找,我也找不到解决方案 我想可能是因为我使用的是Spring Data JPA环境: EDIT我删除了扩展了AbstractAuditable并创建了id,然后错误移动到了另一个具有AbstractAuditable的实体,所以我用错了这个类 stracktrace的相关部分说: Caused by: org.hibernate.MappingException: Could

我试图用JPA2和Hibernate作为提供者映射我的实体,但不幸的是,我有一个例外,可能有几个人知道,但即使在web上查找,我也找不到解决方案 我想可能是因为我使用的是Spring Data JPA环境:

EDIT我删除了
扩展了AbstractAuditable
并创建了id,然后错误移动到了另一个具有
AbstractAuditable
的实体,所以我用错了这个类

stracktrace的相关部分说:

Caused by: org.hibernate.MappingException: Could not determine type for: java.util.Collection, at table: car, for columns: [org.hibernate.mapping.Column(gearAssigments)]
涉及的实体如下:

齿轮传动

@Entity
@Table(name = "gear_assigment")
public class GearAssigment extends AbstractAuditable<User, Integer> {

    private Integer usedQuantity;

    private Car car;

    private Gear gear;

    public GearAssigment(int id) {
        this.setId(id);
    }

    public GearAssigment() {
    }

    @Column(name = "used_quantity")
    public Integer getUsedQuantity() {
        return usedQuantity;
    }

    public void setUsedQuantity(Integer usedQuantity) {
        this.usedQuantity = usedQuantity;
    }

    @ManyToOne
    @JoinColumn(name = "car",referencedColumnName = "id")
    public Car getCar() {
        return car;
    }

    public void setCar(Car car) {
        this.car = car;
    }

    @ManyToOne
    @JoinColumn(name = "gear",referencedColumnName = "id")
    public Gear getGear() {
        return gear;
    }

    public void setGear(Gear gear) {
        this.gear = gear;
    }
}
@实体
@表(name=“齿轮分配”)
公共类GearAssigment扩展了AbstractAuditable{
私有整数使用量;
私家车;
私人齿轮;
公共齿轮分配(内部id){
这个.setId(id);
}
公共齿轮分配(){
}
@列(name=“已用数量”)
公共整数getUsedQuantity(){
返回使用数量;
}
公共void setUsedQuantity(整数usedQuantity){
this.usedQuantity=usedQuantity;
}
@许多酮
@JoinColumn(name=“car”,referencedColumnName=“id”)
公共汽车{
返回车;
}
公共车辆{
这辆车;
}
@许多酮
@JoinColumn(name=“gear”,referencedColumnName=“id”)
公共齿轮getGear(){
返回齿轮;
}
公共无效设置齿轮(齿轮){
这个齿轮=齿轮;
}
}
汽车

@实体
@表(name=“car”)
可审计的公共级汽车{
私有字符串名称;
私人类别;
私人募捐;
公共车辆(整数id){
这个.setId(id);
}
公共汽车{
}
@列(name=“name”)
公共字符串getName(){
返回名称;
}
公共void集合名(字符串名){
this.name=名称;
}
@列(name=“category”)
@枚举(EnumType.STRING)
公共类别getCategory(){
退货类别;
}
公共无效集合类别(类别){
this.category=类别;
}
@OneToMany(mappedBy=“汽车”)
公共集合getGearAssigments(){
返回齿轮分配;
}
公共无效集合齿轮分配(集合齿轮分配){
this.gearAssigments=gearAssigments;
}
}

数据库上的所有表都将
id
作为主键,
AbstractAuditable扩展了AbstractPersistable
,它已经将
id列
映射到
@GeneratedValue
,并且映射到
@MappedSuperClass

不要紧,
AbstractAuditable
字段是在字段级别用javax.persistence注释注释的,而不是像我在实体级别那样在方法级别,所以您要覆盖Spring的类或在字段级别注释所有实体字段。所以冬眠不要把它们混在一起

@Entity
@Table(name = "car")
public class Car extends AbstractAuditable<User, Integer> {

    private String name;

    private Category category;

    private Collection<GearAssigment> gearAssigments;

    public Car(Integer id) {
        this.setId(id);
    }

    public Car() {
    }

    @Column(name = "name")
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Column(name = "category")
    @Enumerated(EnumType.STRING)
    public Category getCategory() {
        return category;
    }

    public void setCategory(Category category) {
        this.category = category;
    }

    @OneToMany(mappedBy = "car")
    public Collection<GearAssigment> getGearAssigments() {
        return gearAssigments;
    }

    public void setGearAssigments(Collection<GearAssigment> gearAssigments) {
        this.gearAssigments = gearAssigments;
    }
}