vobord1 napsal(a):
Zdravim,
pouzivam jsf, ejb.
v databazi mam tabulky "ciselnik" a "osoba", nejsou propojene cizim klicem, ale
tabulka osoba ma sloupec s id ciselniku
je mozne namapovat entitu osoba ktera bude mit misto
@Column(...)
private BigDecimal idCiselnik;
Toto není objektově správně. Takto by se němělo používat mapování vztahů.
mimochodem, proč má číselník primární klíč BigDecimal?
- nestačilo by třeba Long nebo int?
namapovanou primo entitu ciselniku - stejne jakoby tam vazba s FK byla?
@JoinColumn(...)
@ManyToOne
private Ciselnik ciselnik;
Tento postup je správný. V DB by se měl vygenerovat i cizí klíč.
pri pouziti jednoduche aplikace bez podpory ejb jsem vytvoril Converter pro
entitu Ciselnik a vse fungovalo, EntityManager bez problemu data ulozi.
Nyni jsem ale pridal EJB modul. Data se zobrazuji bez problemu az do momentu
kdy ulozim novou osobu. Pri ukladani objektu osoba s nastavenym ciselnikem se
mi sice data spravne ulozi do db ale od tohoto momentu mi pri nacteni vraci
null v promenne ciselnik - nejen u prave ulozene osoby ale u vsech nactenych
osob ktere maji stejne id ciselniku - pri novem deployi aplikace se vse zobrazi
normalne - dokud opet neco neulozim.
Pokud se data uloží do DB v pořádku, tak by mohl být problém s konvertorem.
Třída CiselnikConverter v JSF by mohla vypadat třeba takto
public class CiselnikConverter implements Converter{
public Object getAsObject(FacesContext
<http://java.sun.com/javaee/javaserverfaces/1.2/docs/api/javax/faces/context/FacesContext.html> context,
UIComponent
<http://java.sun.com/javaee/javaserverfaces/1.2/docs/api/javax/faces/component/UIComponent.html> component,
java.lang.String value){
int ciselnikId=Integer.parseInt(value);
CiselnikDAO ciselnikDAO= ... // DAO pro spravu ciselniku
return ciselnikDAO.findCiselnikById(ciselnikId); // nacte
ciselnik dle id z DB
}
public String *getAsString*(FacesContext
<http://java.sun.com/javaee/javaserverfaces/1.2/docs/api/javax/faces/context/FacesContext.html> context,UIComponent
<http://java.sun.com/javaee/javaserverfaces/1.2/docs/api/javax/faces/component/UIComponent.html> component,
java.lang.Object value){
Ciselnik c=(Ciselnik) value;
return Integer.toString(c.getId());
}
}
Muze za to proxy pres kterou objekt posilam do ejb modulu a converter uz
nefunguje?
Nevím. S proxy nemám zkušenost.
dik za odpovedi
dave
Fafi