> 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?

nevim jak v JPA, ael v Hibernatu jeste pridejte

newKomentar.setClanek(clanek)

a melo by to fakcit.

> 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.

Moc tomu nerozumim...
> 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 "";



-- 
S pozdravem Roman "Dagi" Pichlik

/* http://www.sweb.cz/pichlik/ Blog pro kodery */

Odpovedet emailem