[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
| 
[eclipselink-users] Problems Mapping Map
 | 
Hi,
I have some problems to map an entity that contains a Map association.
The problems is how it maps this association (the code of the classes
that i use is at the end of message)  :
On the database i have 4 tables,  class1, class2, class3 and
class3_class2 that maps the association in the map but this last table
has only 2 column: the class3_id and the hm_id and there is no
reference to Class1 that is the key of the Map, there is not a column
that indicates the MapKey id.
I tried using the @MapKey annotation but has no effect on this.
When i retrieve a stored Class3 object from the database and i look
the keys/values in the Map i see that the keys are the id of the
Class2 object stored in the Map, and the Class1 objects are ignored.
What is wrong with this ?  Seems correct but maybe i miss something.
Thanks for the help.
Bye
These are the classes that i used for test:
// Class1
@Entity
public class Class1 {
        private int id;
        private String string;
        protected Class1(){
        }
        public Class1(String string){
                this.string = string;
        }
        /**
         * @return the id
         */
        @Id
        @GeneratedValue
        public int getId() {
                return id;
        }
        /**
         * @param id the id to set
         */
        public void setId(int id) {
                this.id = id;
        }
        /**
         * @return the string
         */
        public String getString() {
                return string;
        }
        /**
         * @param string the string to set
         */
        public void setString(String string) {
                this.string = string;
        }
        /* (non-Javadoc)
         * @see java.lang.Object#equals(java.lang.Object)
         */
        @Override
        public boolean equals(Object obj) {
                return string.equals(obj);
        }
        /* (non-Javadoc)
         * @see java.lang.Object#hashCode()
         */
        @Override
        public int hashCode() {
                return string.hashCode();
        }
        /* (non-Javadoc)
         * @see java.lang.Object#toString()
         */
        @Override
        public String toString() {
                return string;
        }
}
// Class2
@Entity
public class Class2 {
        private String string;
        private int id;
        protected Class2(){
        }
        public Class2(String string){
                this.string = string;
        }
        /**
         * @return the string
         */
        public String getString() {
                return string;
        }
        /**
         * @param string the string to set
         */
        public void setString(String string) {
                this.string = string;
        }
        /**
         * @return the id
         */
        @Id
        @GeneratedValue
        public int getId() {
                return id;
        }
        /**
         * @param id the id to set
         */
        public void setId(int id) {
                this.id = id;
        }
        /* (non-Javadoc)
         * @see java.lang.Object#equals(java.lang.Object)
         */
        @Override
        public boolean equals(Object obj) {
                return string.equals(obj);
        }
        /* (non-Javadoc)
         * @see java.lang.Object#hashCode()
         */
        @Override
        public int hashCode() {
                return string.hashCode();
        }
        /* (non-Javadoc)
         * @see java.lang.Object#toString()
         */
        @Override
        public String toString() {
                return string;
        }
}
// Class3
@Entity
public class Class3 {
        private int id;
        private Map<Class1,Class2> hm;
        public Class3(){
                hm = new HashMap<Class1,Class2>();
        }
        /**
         * @return the id
         */
        @Id
        @GeneratedValue
        public int getId() {
                return id;
        }
        /**
         * @param id the id to set
         */
        public void setId(int id) {
                this.id = id;
        }
        /**
         * @return the hm
         */
        @ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
        public Map<Class1, Class2> getHm() {
                return hm;
        }
        /**
         * @param hm the hm to set
         */
        public void setHm(Map<Class1, Class2> hm) {
                this.hm = hm;
        }
        public void add_key_value(Class1 c1, Class2 c2){
                hm.put(c1, c2);
        }
}