2

Hibernate 3 アノテーションを使用しています。テーブル 'product' と子テーブル 'product_spec' が 1 対多の関係にあります。hibernateTemplate.save(product) を実行すると、エラーが発生します

挿入できませんでした: [com.xx.ProductSpec]; SQL [Products_spec 列 'PRODUCT_ID' に挿入して null にすることはできません

@Entity
@Table(name = "product")
public class Product implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id @GeneratedValue
    @Column(name = "PRODUCT_ID")
    private Integer productId;

    @Column(name = "PRODUCT_NAME")
    private String productName;

    @OneToMany(mappedBy = "product",fetch = FetchType.EAGER, cascade = CascadeType.ALL)
    private List<ProductSpec> specs = new ArrayList<ProductSpec>();

//getter and setter
}


@Entity
@Table(name = "Products_spec")
public class ProductSpec implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id @GeneratedValue
    @Column(name = "spec_id")
    private Integer specId;

    @ManyToOne
    @JoinColumn(name = "PRODUCT_ID")
    private Product product;

    //getter and setter
}


hibernateUtil.getTemplate().save(product);
4

1 に答える 1

3

問題は、product_id 列 (子の結合列) が非 null であったことです。nullableにした後、うまくいきました。

すべてをカスケードするために休止状態によって実行されるクエリを知りませんでした。

最初の hibernate は、結合列の値が null の子エントリを追加し、次にエントリを更新します。

于 2014-06-18T18:13:37.053 に答える