如何在JPA中持久化具有Collection属性的Bean?

时间:2012-09-01 14:23:45

标签: java-ee jpa persistence

我有以下实体类:

public class Usuario implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "Id")
    private Integer id;
    @Size(max = 255)
    @Column(name = "Senha")
    private String senha;
    @Size(max = 255)
    @Column(name = "Nome")
    private String nome;
    @ManyToMany(mappedBy = "usuarioCollection", fetch = FetchType.EAGER)
    private Collection<Grupo> grupoCollection;      

}

public class Grupo implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "Id")
    private Integer id;
    @Size(max = 255)
    @Column(name = "Nome")
    private String nome;
    @JoinTable(name = "usuario_grupo", joinColumns = {
        @JoinColumn(name = "GrupoID", referencedColumnName = "Id")}, inverseJoinColumns = {
        @JoinColumn(name = "UsuarioID", referencedColumnName = "Id")})
    @ManyToMany(fetch = FetchType.EAGER)
    private Collection<Usuario> usuarioCollection;

}

这些代码是由netbeans生成的。

当我尝试用JPA持续它

entityManager.persist(usuario);

它执行,但usuario_grupo表中没有寄存器。

即usuario已在表中注册(grupo已经存在于表grupo中),但是usuario_grupo没有。

你知道我怎么能这样做吗?

注意:有些名字是葡萄牙语。

2 个答案:

答案 0 :(得分:1)

我的猜测是你没有将对象添加到集合关系的两边,所以它们不会被写入。

答案 1 :(得分:-2)

JPA不喜欢Collection。它适用于Set(无序集合),List(有序集合),我也相信HashMap(我不需要它,所以我不确定)。

如果您的bean 必须具有Collection属性,请将其设为transient并创建一个新的属性(至少是get和set方法)来管理Collection 1}}作为SetList