Hibernate,manyToMany与保存和未保存对象的关系

时间:2015-02-01 04:36:05

标签: java mysql hibernate

我的代码中有A和B对象的Many To Many关联,关系的B对象在数据库的表“B”中注册,其中有两个列,id和name。问题是我有38个B对象通常用于与A关联,它们的id为1到38,用户可以选择它们,它们不能更改,但有人可以添加对象B并保存它在表B中,带有自动增量id以将其与A关联。所以问题是我如何在保存A时将A与保存或未保存的B对象关联?

这是我的代码: A类

@Entity
@Table(name="A", catalog="sist", schema = "")
public class A implements java.io.Serializable {

@Id
@Basic(optional=false)
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer idA;

@ManyToMany (fetch = FetchType.LAZY, cascade = CascadeType.PERSIST)
@JoinTable(name="AB", joinColumns={@JoinColumn(name="idA")}, inverseJoinColumns={@JoinColumn(name="idB")})
private List<B> bs = new ArrayList();

}

B组:

@Entity
@Table(name="B", catalog="sist", schema = "")
public class B implements java.io.Serializable {

 @Id
 @Basic(optional=false)
 @GeneratedValue(strategy = GenerationType.IDENTITY)
 private Integer idB;
 private String nombre;

 @ManyToMany(fetch=FetchType.LAZY, mappedBy="bs")
 private List<A> as = new ArrayList();
}

以下是我在DAO类中保存A的方法:

public void actualizarMedida(A a) throws HibernateException {
    try {
        sesion = sessionFactory.openSession();
        tx = sesion.beginTransaction();
        sesion.persist(a);
        tx.commit();
        sesion.flush();
    } catch (HibernateException he) {
        manejaExcepcion(he);
        throw he;
    } finally {
        sesion.close();
    }
}

现在我可以保存新的B对象并将它们与A关联,但我不能将A与现有的B对象关联。有人能帮我吗?提前谢谢。

1 个答案:

答案 0 :(得分:0)

使用List<A>注释对B实体内的@JoinTable进行注释,同时提供gettersetter s

@JoinTable(name="AB", joinColumns={@JoinColumn(name="idB")})
private List<A>;
//getter and setters.