[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 */