hibernate關於@Id位置不正確導致的系統啟動出錯的問題
阿新 • • 發佈:2019-02-18
有一個Entity (A)需要通過 OneToMany 對映一個List <B>
類A
啟動時直接報錯 Could not determine type for: java.util.List, at table: pay_service_provider, for columns: [org.hibernate.mapping.Column(payCategories)]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; }
一開始以為是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方法上