首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >持久化此对象不会持久化其参数

持久化此对象不会持久化其参数
EN

Stack Overflow用户
提问于 2016-04-30 17:04:16
回答 1查看 62关注 0票数 0

下面是我的实体ForfaitGenerique和Offre。这两个实体在persistence.xml中(没有把所有的方法都放在这里,如果需要,我会添加更多信息):

代码语言:javascript
复制
@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,但它应该包含的所有内容都是null (虽然不是id ):

代码语言:javascript
复制
@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);

databaseAccess对象包含一个实体管理器和两个方法(以及其他方法),它们是:

代码语言:javascript
复制
@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;
}

我认为我的问题是当我试图持久化我的对象,但不确定。任何帮助都是非常感谢的。

EN

回答 1

Stack Overflow用户

发布于 2016-05-02 03:22:23

这是一个愚蠢的解决方案。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36952920

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档