2012-09-01 53 views
0

我有以下實體類:通過netbeans的產生如何在JPA中使用Collection屬性持久Bean?

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; 

} 

這些代碼。

當我試着使用JPA

entityManager.persist(usuario); 

它執行堅持它,但在usuario_grupo表中沒有登記。

即,在表中註冊了usuario(grupo已經存在於表grupo中),但usuario_grupo沒有。

你知道我該如何做到這一點嗎?

注:有些名稱是用葡萄牙語。

+0

你的代碼很長。請提供可複製問題的[簡短,獨立,正確(可編譯),示例](http://sscce.org/)。 – 2012-09-01 14:25:47

+0

我編輯帖子來隱藏無用的代碼。 –

回答

-2

JPA不喜歡Collection。它適用於Set(無序集合),List(有序集合),我相信也與HashMap(我不需要,所以我不知道)。

如果你的bean 必須Collection屬性,使其transient,並作出新attibute(get和set方法,至少)管理該CollectionSetList

+2

不幸的是,這個答案不正確。集合屬性是可以的,順便說一下,這是使用NetBeans嚮導時的默認選擇。 OP問題是由其他原因造成的 – perissf

+1

確實,完全錯誤。也許JPA實現中的Collection字段存在一些問題,但如果是這樣的話,它不會是一個兼容的實現,並且OP沒有提及正在使用的內容。 – DataNucleus

1

我的猜測是你沒有將對象添加到集合關係的兩邊,所以他們沒有寫。