Java 休眠多对一外键不工作
下面是一对多关系的hibernate示例Java 休眠多对一外键不工作,java,hibernate,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
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;
}
}
impl代码
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");
第二桌
# carts_id, cust_name
'1', ' solomon'
正如您看到的,这两个表都已更新,但本例中的foreignkey carts\u id在owner类中未得到更新,我使用了joincolumn您没有在Soloitems的任何位置设置Solocart。尝试将其添加到代码中
itm1.setCartitem(crt);
itm2.setCartitem(crt);
实体solocat和Soloitems之间存在双向关系,因此在代码中需要从实体的两侧维护这种关系 基于此,在您的代码中,您只是将Soloitems设置为Solocart,但没有将Solocart设置为Soloitems,如Predrag所述,添加以下代码行以维护关系:
itm1.setCartitem(crt);
itm2.setCartitem(crt);
您需要设置一个级联选项-即,当持久化父实体时-子实体也将持久化:通常在@OneToMany中,您应该设置级联和获取,从@manytone开始使用mappedBy,但不强制使用后一种onetahnks来帮助它worked@energizer它jsut craetesa新表cart_cartitem连接两个表主键列但外键未更新此处是更改usuggested@energizer@OneToManycascade=CascadeType.ALL@ManyToOnefetch=FetchType.LAZY@JoinColumnname=carts\u id但我得到了一个新的表carts\u id,soloitem\u cart\u id'1','1','2'
itm1.setCartitem(crt);
itm2.setCartitem(crt);
itm1.setCartitem(crt);
itm2.setCartitem(crt);