开发者

EntityManager does not update on flush()

Java EJB's EntityManag开发者_运维问答er does not update data from a Consumer.

A Consumer logs into a shop, buys some stuff and wants to look at his shopping-history. Everything is displayed but his last purchase. If he logs out and in, it shows.

I have used JPA to persist buys/purchases (that are mapped to the Consumer)to DB. It seems like purchases from this session can't be detected.

Code:

public Buys buyItem(Consumer c, int amount) {
    Buys b = new Buys();
    b.setConsumerId(c);
    b.setContent("DVD");
    b.setPrice(amount);
    em.persist(b);
    em.flush();
    return b;
}

public Collection getAllBuysFromUser(Consumer consumer) {
   Collection<Buys> collection = consumer.getBuysCollection();
   return collection;
}

Help!? Flush does not do the trick...


You seem to have a bi-directional one-to-many association between Customer and Buys but I don't see where you add the Buys instance to the buysCollection on the Customer side. I'd expect to see something like this:

public Buys buyItem(Consumer c, int amount) {
    Buys b = new Buys();
    b.setConsumerId(c);
    b.setContent("DVD");
    b.setPrice(amount);
    c.getBuysCollection().add(b);
    em.persist(b);
    em.flush();
    return b;
}

And make sure you implement equals (and hashCode) properly.

I suggest to check 1.2.6. Working bi-directional links (and to add defensive link management methods as suggested).

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜