hibernate许多一个外键不起作用

时间:2014-11-12 05:47:38

标签: java hibernate

以下是关于一对多关系的hibernate示例

cart java class
@Entity
@Table(name="cart")
public class Solocart {
    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    @Column(name="carts_id")
    int id;
    @Column(name="cust_name")

    String name;
    @OneToMany(mappedBy="cartitem")
    Set<Soloitems>soloitem;
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Set<Soloitems> getSoloitem() {
        return soloitem;
    }
    public void setSoloitem(Set<Soloitems> soloitem) {
        this.soloitem = soloitem;
    }




}

下一项java文件

@Entity
@Table(name="cartitem")
public class Soloitems {
    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    @Column(name="cart_id")
    private int id;
    @Column(name="no_item")
    private int number;
    @ManyToOne
    @JoinColumn(name="carts_id")
    private Solocart cartitem;
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public int getNumber() {
        return number;
    }
    public void setNumber(int number) {
        this.number = number;
    }
    public Solocart getCartitem() {
        return cartitem;
    }
    public void setCartitem(Solocart cartitem) {
        this.cartitem = cartitem;
    }

impl code

Session sn=Util.getSessionFactory().openSession();
    sn.beginTransaction();
    Solocart crt=new Solocart();
    crt.setName("solomon");
    Soloitems itm1=new Soloitems();
    Soloitems itm2=new Soloitems();
    itm1.setNumber(5);
    itm2.setNumber(8);
    Set<Soloitems>values= new HashSet<Soloitems>();
    values.add(itm1);
    values.add(itm2);
    crt.setSoloitem(values);
    sn.save(crt);
    sn.save(itm2);
    sn.save(itm1);
    sn.getTransaction().commit();
    sn.close();
    System.out.println("sucessfully created");

这里一个购物车应该有很多项目,同时运行两个颜色已更新,但

# cart_id, no_item, carts_id
     '1', '   8',     NULL
      '2', '  5',     NULL

第二张表

# carts_id, cust_name
    '1', '   solomon'

如你所见,这两个表都已更新,但这里的外键这个案例carts_id没有在所有者类中更新我使用了joincolumn

2 个答案:

答案 0 :(得分:0)

您没有将Solocart设置在Soloitem的任何位置。尝试将此添加到您的代码

itm1.setCartitem(crt);
itm2.setCartitem(crt);

答案 1 :(得分:0)

您在实体SolocartSoloitems之间存在双向关系,因此在您的代码中,您需要维护实体两边的关系。

基于此,在您的代码中,您只是将Soloitems设置为Solocart,但您错过了将Solocart设置为Soloite,因此正如Predrag所提到的那样,添加以下代码行来维护关系:

itm1.setCartitem(crt);
itm2.setCartitem(crt);