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



Odpovedet emailem