有一个Entity (A)需要通过 OneToMany 映射一个List <B>
类A
private int id;
private String name;
private int status;
private Timestamp createTime;
private Timestamp modifyTime;
@OneToMany(cascade = CascadeType.PERSIST, fetch=FetchType.LAZY)
@JoinTable(name = "pay_channelcategory", joinColumns = {@JoinColumn(name = "serviceId")},
inverseJoinColumns = {@JoinColumn(name = "categoryId")})
private List<PayCategory> payCategories;
public List<PayCategory> getPayCategories() {
return payCategories;
}
public void setPayCategories(List<PayCategory> payCategories) {
this.payCategories = payCategories;
}
@Id
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
启动时直接报错 Could not determine type for: java.util.List, at table: pay_service_provider, for columns: [org.hibernate.mapping.Column(payCategories)]一开始以为是List导致了,改成Set后依旧,但是前几天配置的一个一对多明明没有问题呀
翻开前几天配置的那个类.,发现唯一的区别在于
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
这个@ID是注解在id这个field上的,而我原来的@Id是注解在get上的,在测试了是否是因为@GenerateValue ,@Id这两个个注解导致之后
@GeneratedValue(strategy = GenerationType.IDENTITY)
可以断定是由于@Id没有放在field上导致的这个错误, IDEA中hibernate 实体映射工具默认情况是直接把@Id加在主键的get方法上的,而我自己配置关联关系时,把注解放在了field上, 规定是同一个实体类,注解要么只放在field上,要么只放在get方法上