Zdravím,

dělám aplikci pro evidenci příspěvků (článků), která zároveň umožnuje 
vkládat ke každému příspěvku (článku) X komentářů. Na SQL serveru jsou dvě 
tabulky CLANKY a KOMENTARE, které jsou spolu provázané pře IDCLANEK. Mám 
dva dotazy:

1. Pokud mám vytvořenu instanci clanky třídy Clanky a přidám nový komentář 
clanek.getKomentareCollection().add(newKomentar) jak zajistit to, aby se 
naplnilo automaticky i idclanek v takto vloženém komentáři?

2. komentář vkládám přes JSF kdy se poprvé volá clanek(), která vytvoří 
novou instanci newKomentar třídy Komentare a následně se ukládá přes 
ulozKomentar(), kde se pak vrací zpět na tu samou stránku. problém je, že 
to do databáze ukládá jakoby o krok zpět tj. při uložení druhého komentáře 
se uloží první. Pokud bych místo em.flush() použil em.persist(clanek), tak 
to vyhodí vyjímku, že nemůže uložit detachnutý objekt.

Doufám, že jsem to napsal srozumitelně. Toto je moje první použití JPA na 
relace, tak se předem omlouvám za možná stupidní otázky

Díky

Pavel




public class Clanky implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @Column(name = "idclanek", nullable = false)
    @GeneratedValue(strategy=IDENTITY)
    private Integer idclanek;
    @Column(name = "datum", nullable = false)
    @Temporal(TemporalType.TIMESTAMP)
    private Date datum;
    @Column(name = "nadpis", nullable = false)
    private String nadpis;
    @Lob
    @Column(name = "text", nullable = false)
    private String text;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "idclanek")
    private List<Komentare> komentareCollection;


public class Komentare implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @Column(name = "idkomentar", nullable = false)
    @GeneratedValue(strategy=IDENTITY)
    private Integer idkomentar;
    @Column(name = "datum", nullable=false)
    @Temporal(TemporalType.TIMESTAMP)
    private Date datum;
    @Column(name = "jmeno", nullable = false)
    private String jmeno;
    @Lob
    @Column(name = "text", nullable = false)
    private String text;
    @JoinColumn(name = "idclanek", referencedColumnName = "idclanek")
    @ManyToOne(fetch=FetchType.EAGER)
    private Clanky idclanek;




    public String clanek() {
        clanek = (Clanky) dataTable.getRowData();
        newKomentar = new Komentare();
        newKomentar.setIdclanek(clanek);
        return "success";
    }

    public String ulozKomentar() {
        em = emf.createEntityManager();
        em.getTransaction().begin();
        em.merge(clanek);
        clanek.getKomentareCollection().add(newKomentar);
        em.flush();
        em.getTransaction().commit();
        em.close();
        newKomentar = new Komentare();
        newKomentar.setIdclanek(clanek);
        return "";

Odpovedet emailem