1. 程式人生 > >hibernate關於@Id位置不正確導致的系統啟動出錯的問題

hibernate關於@Id位置不正確導致的系統啟動出錯的問題

有一個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方法上