扩展AbstractAuditable(Spring数据)会在多通关系上导致org.hibernate.MappingException
我试图用JPA2和Hibernate作为提供者映射我的实体,但不幸的是,我有一个例外,可能有几个人知道,但即使在web上查找,我也找不到解决方案 我想可能是因为我使用的是Spring Data JPA环境: EDIT我删除了扩展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
扩展了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;
}
}