[EMAIL PROTECTED] wrote on 02.06.2008 21:55:32:

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

jj toto pouzivam, jen jsem myslel, jestli by to JPA neumelo nejak 
"automaticky"


> 
> 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émje, 
ž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...


v podstate jde o to, jestli metoda ulozKomentar() pouziva spravny postup 
jak pridat a ulozit zaznam do kolekce List<Komentare> komentareCollection 
v instanci (Clanky) clanek


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