Moc dekuji, jaxe zda, je to presne co potrebuji, jenom bych se rad, pro lepsi
pochopeni' ujistil o nasledujicich vecech:
@JoinTable(
name="citizen_country",
[EMAIL PROTECTED](name="citizen_id")}, // nemá byt country_id?
[EMAIL PROTECTED](name="id_country"),
@JoinColumn(name="lang_country")}
)
Nac je tam nasledujici override:
@AttributeOverrides({
@AttributeOverride(name="idCountry", column =
@Column(name="id_country")),
@AttributeOverride(name="langCountry", column =
@Column(name="lang_country"))})
Je to kvuli tomu, jak mam mapovano přes mappedKey = id.langCountry?
Moc dekuji, opravdu jste mi velmi pomohl
Martin
-----Original Message-----
From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Jiri Frydek
Sent: Friday, May 25, 2007 12:46 PM
To: [email protected]
Subject: RE: ManyToMany Anotace
Tak jinak, zkusil js em si udelat maly priklad tak jak jsem to
pochopil, ze to potrebujete. Tak snad Vam to nejak pomuze.
Trida Citizen:
@Entity
@Table(name="tbl_citizen")
@SequenceGenerator(name="SEQ_CITIZEN", sequenceName="seq_citizen",
allocationSize=1)
public class Citizen implements Serializable {
private static final long serialVersionUID = -5055682646938542793L;
private int citizenId;
private Map<Integer, Country> citizenCountries;
@Id
@GeneratedValue(strategy=GenerationType.SEQUENCE,
generator="SEQ_CITIZEN")
public int getCitizenId() {
return citizenId;
}
public void setCitizenId(int citizenId) {
this.citizenId = citizenId;
}
@ManyToMany(
targetEntity=Country.class,
cascade={CascadeType.PERSIST, CascadeType.MERGE}
)
@JoinTable(
name="citizen_country",
[EMAIL PROTECTED](name="citizen_id")},
[EMAIL PROTECTED](name="id_country"),
@JoinColumn(name="lang_country")}
)
@MapKey(name="id.langCountry")
public Map<Integer, Country> getCitizenCountries() {
return citizenCountries;
}
public void setCitizenCountries(Map<Integer, Country> citizenCountries)
{
this.citizenCountries = citizenCountries;
}
}
Trida Country:
@Entity
@Table(name="tbl_country")
public class Country implements Serializable {
private static final long serialVersionUID = -7193652811305990736L;
@EmbeddedId
@AttributeOverrides({
@AttributeOverride(name="idCountry", column =
@Column(name="id_country")),
@AttributeOverride(name="langCountry", column =
@Column(name="lang_country"))})
public CountryPk id;
private String name;
public CountryPk getId() {
return id;
}
public void setId(CountryPk id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Trida CountryPk:
@Embeddable
public class CountryPk implements Serializable {
private static final long serialVersionUID = 1841620326117312910L;
private int idCountry;
private int langCountry;
... //jen gettry a settry
}
pak kod ukladajici k jednomu obyvateli jedenu zemi v dane lokalizaci:
CountryPk pk = new CountryPk();
pk.setIdCountry(1);
pk.setLangCountry(2);
Country country = new Country();
country.setId(pk);
country.setName("Name");
country = entityManager.merge(country);
Citizen citizen = new Citizen();
Map<Integer, Country> map = citizen.getCitizenCountries();
if (map == null) {
map = new HashMap<Integer, Country>();
}
map.put(country.getId().getLangCountry(), country);
citizen.setCitizenCountries(map);
citizen = entityManager.merge(citizen);
Jura
Cituji Tuma Martin <[EMAIL PROTECTED]>:
> Tohle je presne stav, které se chci vyhnout, pokud to pujde.
>
>
> -----Original Message-----
> From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]
> On Behalf Of Jiri Frydek
> Sent: Friday, May 25, 2007 10:50 AM
> To: [email protected]
> Subject: Re: ManyToMany Anotace
>
> Pokud jsem to pochopil spravne, tak by pro Vas mozna bylo lepsi mit
> misto dvou tabulek tri:
> Citizen s vazbou 1:N na Country a k k nemu s 1:N vazbou na CountryName
> (lokalizace jmena daneho statu).
> Bude-li navic v Country misto kolekce jmen mapa, pak muze byt jejim
> klicem jazyk a pri ziskazni seznamu zemi pak jdenoduse zobrazite jeji
> jmeno ve vybrane/vybranych lokalizacich.
>
> Jura
>
> Cituji Tuma Martin <[EMAIL PROTECTED]>:
>
>> Dobry den,
>>
>>
>>
>> Rad bych se zeptal, jestli lze realizovat nejak anotace ManyToMany,
>> ktere nepracuje s primarnim klicem na strane pripojene tabulky, reps.
>> treba pracuje jenom s casti primarniho klice. Mam tabulky tab_country,
>> kde primarni klic je id_country a lang_country (jazykova mutace zaznamu)
>> a posledni sloupec je name_country v danem jazyku. Potom tabulku tabulku
>> tab_citizen, kde primarni klic je sequence a obsahuje polozku
>> citizen_country - potreboval bych nejak udelat mapovani tak, abych v
>> getCitizenCountry dostal seznam vsech jazyk. Mutaci daneho statu a
>> vybral si jenom to co potrebuji. Dale mi neni jasne, jak to bude
>> fungovat pri ukladani - tedy jak ma vypadat setter dane polozky. A
>> posledni vec, na kterou bych se rad zeptal - co kdyz bude dane
>> ManyToMany mapovani soucasti primarni klice, pujde ten klic
>> serializovat? Predem moc vse dekuji za radu, uz se s tim morim par dnu a
>> nemuzu se phnout z mista. Jo, kdyby to bylo mozno v anotaci pro
>> Hibernate, bylo by to naprosto skvele.
>>
>>
>>
>> Martin
>>
>>
>>
>>
>>
>>
>
>
>
>