以下是关于一对多关系的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
答案 0 :(得分:0)
您没有将Solocart
设置在Soloitem
的任何位置。尝试将此添加到您的代码
itm1.setCartitem(crt);
itm2.setCartitem(crt);
答案 1 :(得分:0)
您在实体Solocart
和Soloitems
之间存在双向关系,因此在您的代码中,您需要维护实体两边的关系。
基于此,在您的代码中,您只是将Soloitems设置为Solocart,但您错过了将Solocart设置为Soloite,因此正如Predrag所提到的那样,添加以下代码行来维护关系:
itm1.setCartitem(crt);
itm2.setCartitem(crt);