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