2016-04-30 11 views
0

ForfaitGeneriqueとOffreは、私のエンティティです。これら2つのエンティティは、(私はより多くの情報を追加する必要があれば、ここでのすべてのメソッドを入れていない)persistence.xmlである:このオブジェクトを永続化してもパラメータは維持されません

@Entity 
public class ForfaitGenerique implements Serializable { 

@Id 
@GeneratedValue(strategy = GenerationType.AUTO) 
private int idForfait; 

@NotNull 
private String description = "description"; 


@NotNull 
@OneToMany(cascade = {CascadeType.ALL},fetch = FetchType.LAZY,mappedBy = "forfaitGenerique") 
private List<Offre> listeOffre; 

@NotNull 
@ElementCollection 
List<Integer> listeRemontees; 
//erreur sur mon intellij mais pas d'erreur en faisant mvn clean install.On verra au test 

public ForfaitGenerique() { 

} 
public void addOffre(Offre o) { 
    this.listeOffre.add(o); 
} 

[...] 

@Entity 
public class Offre implements Serializable { 

@NotNull 
private AgeEnum age; 

@Id 
@GeneratedValue(strategy = GenerationType.AUTO) 
private int id; 

@NotNull 
private double nbJour; 

@Enumerated(EnumType.STRING) 
@NotNull 
private SaisonEnum saison; 

@Enumerated(EnumType.STRING) 
@NotNull 
private ReductionEnum reduction; 

boolean consecutif; 

@NotNull 
private double prix; 

@ManyToOne 
private ForfaitGenerique forfaitGenerique; 

public Offre() { 
} 

ここで私はForfaitGeneriqueを保持しようとしているものです。私はそれを維持し、そのIDを介して取得しようとすると(これはnullではなく、良い値を持つようです)、私はForfaitGeneriqueを取得します。これはnullではありませんが、けれども):

databaseAccessオブジェクトがあるのEntityManagerと二つの方法(他の中で)、含まれてい
@EJB(name="databaseAccess") protected ForfaitsInterface databaseAccess; 
private ForfaitGenerique f; 
private Offre offre_f; 
[...] 
    ArrayList<Integer> l = new ArrayList<>(); 
    l.add(1); 
    l.add(2); 
    l.add(3); 

    ForfaitGenerique forf = new ForfaitGenerique(); 
    List<Offre> l_o = new ArrayList<Offre>(); 
    forf.setListeOffre(l_o); 
    forf.setListeRemontees(l); 
    Offre o = new Offre(forf,AgeEnum.ADULTE,0.5,SaisonEnum.HAUTE,ReductionEnum.FIDELICIME,true,12.0); 
    forf.addOffre(o); 
    databaseAccess.addForfaitGenerique(forf); 
    int id_f = forf.getIdForfait(); 
    assertNotNull(id_f); 
    System.out.println("bloublou"+id_f); 
    f = databaseAccess.getForfaitGenerique(id_f); 
    assertNotNull(f); 
    assertNotNull(f.getListeRemontees());//null !! 

    assertNotNull(f.getListeOffre());//null !! 
    assertEquals(f,forf); 
    offre_f = f.getListeOffre().get(0); 

@Stateless(name="databaseAccess") 
public class Forfaits implements ForfaitsInterface { 
@PersistenceContext private EntityManager entityManager; 

public void addForfaitGenerique(ForfaitGenerique forfaitGenerique) { 
    entityManager.persist(forfaitGenerique); 
    System.out.println("contains = "+entityManager.contains(forfaitGenerique)); 
} 

@Override 
public void addOffre(Offre o) { 
    entityManager.persist(o); 
} 

public ForfaitGenerique getForfaitGenerique(int id_forfait) { 
    ForfaitGenerique f = entityManager.find(ForfaitGenerique.class,id_forfait);//database.getForfaitFromId(id_forfait); 
    return f; 
} 

は私が私のオブジェクトを永続化しようとしていたときに私の問題があると思いますが、しかし、わからない 。どんな助けもありがとうございます。

+0

データベースには何が表示されますか?エンティティはDBに保存されていますか? – ujulu

+0

"find"は私にnot notull ForfaitGeneriqueを与えてくれるので、推測します。検索されたオブジェクトがデータベースにない場合は例外をスローしようとしましたが、例外もありませんでした。私はこのエンティティがデータベースに格納されていると思います。私は問題なく保存され、検索される他のエンティティも持っています。 –

+0

'database_ccess.addForfaitGenerique(forf);'の呼び出しの前と後に 'id_f;'のコンソール出力をポストできますか? – ujulu

答えて

0

実際、テストの前に@Transactional(TransactionMode.COMMIT)を追加するのを忘れてしまった。それはばかな解決策でした。

関連する問題