Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 6936025
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 27, 20262026-05-27T12:10:49+00:00 2026-05-27T12:10:49+00:00

I want to create a table, where the id is come strings composed. This

  • 0

I want to create a table, where the id is come strings composed. This is how I did is following some examples and documentation:

       @Entity
@Table(name = "media_locator")
public class MediaLocator {

    private List<MediaObject> mediaObjects;
    private MediaLocatorPK primaryKey = new MediaLocatorPK();

//    @Id
//    @GeneratedValue(strategy = GenerationType.AUTO)
//    @Column(name = "id", unique = true, nullable = false)
//    public int getId() {
//        return id;
//    }
//
//    public void setId(int id) {
//         this.id = id;
//    }

    @EmbeddedId
    public MediaLocatorPK getPrimaryKey() {
        return primaryKey;
    }

    public void setPrimaryKey(MediaLocatorPK primaryKey) {
        this.primaryKey = primaryKey;
    }



//    @Column(name = "location", length = 200)
    public String getLocation() {
        return primaryKey.getLocation();
    }


    public void setLocation(String location) {
        this.primaryKey.setLocation(location);
    }

//    @Column(name = "description", length = 200, nullable = false)
    public String getDescription() {
        return primaryKey.getDescription();
    }

    public void setDescription(String description) {
        this.primaryKey.setDescription(description);
    }


//    @OneToMany(cascade=CascadeType.ALL, fetch=FetchType.LAZY, mappedBy="mediaLocator")    
//    public List<MediaObject> getMediaObjects() {
//        return mediaObjects;
//    }
//
//    public void setMediaObjects(List<MediaObject> mediaObjects) {
//         mediaObjects = mediaObjects;
//    }


    @ManyToMany(
            cascade={CascadeType.ALL},  
            fetch=FetchType.LAZY)
    @JoinTable(name = "media_object_location", 
            joinColumns=@JoinColumn(name="mediaLocator_id"),
            inverseJoinColumns=@JoinColumn(name="mediaObject_id"))  
    public List<MediaObject> getMediaObjects() {
        return mediaObjects;
    }

    public void setMediaObjects(List<MediaObject> mediaObjects) {
        this.mediaObjects = mediaObjects;
    }


//    @Column(name = "protocol", length = 200, nullable = false)
    public String getProtocol() {
        return primaryKey.getProtocol();
    }

    public void setProtocol(String protocol) {
        this.primaryKey.setProtocol(protocol);
    }
//    @Column(name = "host", length = 200, nullable = false)
    public String getHost() {
        return primaryKey.getHost();
    }

    public void setHost(String host) {
        this.primaryKey.setHost(host);
    }
//    @Column(name = "port", length = 200, nullable = false)
    public String getPort() {
        return primaryKey.getPort();
    }

    public void setPort(String port) {
        this.primaryKey.setPort(port);
    }
//    @Column(name = "path", length = 200, nullable = false)
    public String getPath() {
        return primaryKey.getPath();
    }

    public void setPath(String path) {
        this.primaryKey.setPath(path);
    }

@Embeddable class MediaLocatorPK implements Serializable
{
  private String location;
  private String description;
  private String protocol;
  private String host;
  private String port;
  private String path;

    public String getLocation() {
        return location;
    }
    public void setLocation(String location) {
        this.location = location;
    }
    public String getDescription() {
        return description;
    }
    public void setDescription(String description) {
        this.description = description;
    }
    public String getProtocol() {
        return protocol;
    }
    public void setProtocol(String protocol) {
        this.protocol = protocol;
    }
    public String getHost() {
        return host;
    }
    public void setHost(String host) {
        this.host = host;
    }
    public String getPort() {
        return port;
    }
    public void setPort(String port) {
        this.port = port;
    }
    public String getPath() {
        return path;
    }
    public void setPath(String path) {
        this.path = path;
    }


}

Before, I had an id auto generated, and each atribute had a colum in the table, @Column(name = "location", length = 200), for instance.

In this way I can not store the data due to referencies from relations with other objects

Caused by: org.hibernate.AnnotationException: A Foreign key refering com.app.MediaLocator from com.app.MediaObject has the wrong number of column. should be 6
    at org.hibernate.cfg.annotations.TableBinder.bindFk(TableBinder.java:429)
    at org.hibernate.cfg.annotations.CollectionBinder.bindCollectionSecondPass(CollectionBinder.java:1443)
    at org.hibernate.cfg.annotations.CollectionBinder.bindManyToManySecondPass(CollectionBinder.java:1262)
    at org.hibernate.cfg.annotations.CollectionBinder.bindStarToManySecondPass(CollectionBinder.java:693)
    at org.hibernate.cfg.annotations.CollectionBinder$1.secondPass(CollectionBinder.java:628)
    at org.hibernate.cfg.CollectionSecondPass.doSecondPass(CollectionSecondPass.java:65)
    at org.hibernate.cfg.Configuration.originalSecondPassCompile(Configuration.java:1686)
    at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1393)
    at org.hibernate.cfg.Configuration.buildMappings(Configuration.java:1345)
    at org.springframework.orm.hibernate3.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:717)
    at org.springframework.orm.hibernate3.AbstractSessionFactoryBean.afterPropertiesSet(AbstractSessionFactoryBean.java:211)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1469)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1409)

This specific relation is:

@ManyToMany(
            cascade={CascadeType.ALL},  
            fetch=FetchType.LAZY)
    @JoinTable(name = "media_object_location", 
            joinColumns=@JoinColumn(name="mediaLocator_id"),
            inverseJoinColumns=@JoinColumn(name="mediaObject_id"))  
    public List<MediaObject> getMediaObjects() {
        return mediaObjects;
    }

    public void setMediaObjects(List<MediaObject> mediaObjects) {
        this.mediaObjects = mediaObjects;
    }

And from mediaObject side:

@ManyToMany(cascade = { CascadeType.PERSIST, CascadeType.MERGE }, fetch = FetchType.LAZY, mappedBy = "mediaObjects")
    public List<MediaLocator> getMediaLocators() {
        return mediaLocators;
    }

    public void setMediaLocators(List<MediaLocator> mediaLocators) {
        this.mediaLocators = mediaLocators;
    }

what am I doing wrong?

Thanks in advance

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-05-27T12:10:49+00:00Added an answer on May 27, 2026 at 12:10 pm

    Once you have moved properties to the embeddable class you need to remove them from the main class, there will be just one reference of your embedded class, so in your example you need to remove all properties like location from your MediaLocator class.

    Also what is property id doing in your MediaLocator ? Since there is no specific column annotation in your class hibernate will try to map each and every attribute to the table column, it will succeed in that mapping if the naming of both the property and table column are same.

    If you dont need id then either remove it or mark it as @Transient.

    This piece of code will reproduce the same error what you are getting.

    Student Class

    package com.mumz.test.jpa.embedded.manytomany;
    
    import java.util.Set;
    
    import javax.persistence.CascadeType;
    import javax.persistence.Entity;
    import javax.persistence.Id;
    import javax.persistence.JoinColumn;
    import javax.persistence.JoinTable;
    import javax.persistence.ManyToMany;
    import javax.persistence.Table;
    
    @Entity
    @Table(name="STUDENT")
    public class StudentMTM {
    
        private StudentMTMPK    studentPK   = null;
        private Set<Address>      address     = null;
    
        public StudentMTM(StudentMTMPK studentPK, Set<Address> address) {
            super();
            this.studentPK = studentPK;
            this.address = address;
        }
    
        /**
         * @return the id
         */
        public Integer getId() {
            return studentPK.getId();
        }
    
        /**
         * @param id the id to set
         */
        public void setId(Integer id) {
            studentPK.setId(id);
        }
    
        /**
         * @return the name
         */
        public String getName() {
            return studentPK.getName();
        }
    
        /**
         * @param name the name to set
         */
        public void setName(String name) {
            studentPK.setName(name);
        }
        /**
         * @param studentPK
         *            the studentPK to set
         */
        public void setStudentPK(StudentMTMPK studentPK) {
            this.studentPK = studentPK;
        }
    
        /**
         * @param address
         *            the address to set
         */
        public void setAddress(Set<Address> address) {
            this.address = address;
        }
    
        /**
         * @return the address
         */
        @ManyToMany(cascade = CascadeType.ALL)
        @JoinTable(name = "STUDENT_ADDRESS", joinColumns =
            {
                @JoinColumn(name = "STUDENT_ID")
            }, inverseJoinColumns =
            {
                @JoinColumn(name = "ADDRESS_ID")
            })
        public Set<Address> getAddress() {
            return address;
        }
    
        /**
         * @return the studentPK
         */
        @Id
        public StudentMTMPK getStudentPK() {
            return studentPK;
        }
    
        /*
         * (non-Javadoc)
         * 
         * @see java.lang.Object#hashCode()
         */
        @Override
        public int hashCode() {
            final int prime = 31;
            int result = 1;
            result = prime * result + ((studentPK == null) ? 0 : studentPK.hashCode());
            result = prime * result + ((address == null) ? 0 : address.hashCode());
            return result;
        }
    
        /*
         * (non-Javadoc)
         * 
         * @see java.lang.Object#equals(java.lang.Object)
         */
        @Override
        public boolean equals(Object obj) {
            if (this == obj) {
                return true;
            }
            if (obj == null) {
                return false;
            }
            if (!(obj instanceof StudentMTM)) {
                return false;
            }
            StudentMTM other = (StudentMTM) obj;
            if (studentPK == null) {
                if (other.studentPK != null) {
                    return false;
                }
            } else if (!studentPK.equals(other.studentPK)) {
                return false;
            }
            if (address == null) {
                if (other.address != null) {
                    return false;
                }
            } else if (!address.equals(other.address)) {
                return false;
            }
            return true;
        }
    }
    

    Student PK Class:

    package com.mumz.test.jpa.embedded.manytomany;
    
    import java.io.Serializable;
    
    import javax.persistence.Column;
    import javax.persistence.Embeddable;
    
    @Embeddable
    public class StudentMTMPK implements Serializable{
        /**
         * 
         */
        private static final long serialVersionUID = 3686950547855931594L;
        private Integer id = null;
        private String name = null;
    
        public StudentMTMPK(Integer id, String name) {
            this.id = id;
            this.name = name;
        }
    
        /**
         * @return the id
         */
        @Column(name="STUDENT_ID")
        public Integer getId() {
            return id;
        }
    
        /**
         * @param id the id to set
         */
        public void setId(Integer id) {
            this.id = id;
        }
    
        /**
         * @return the name
         */
        @Column(name="STUDENT_NAME")
        public String getName() {
            return name;
        }
    
        /**
         * @param name the name to set
         */
        public void setName(String name) {
            this.name = name;
        }
    
        /* (non-Javadoc)
         * @see java.lang.Object#hashCode()
         */
        @Override
        public int hashCode() {
            final int prime = 31;
            int result = 1;
            result = prime * result + ((id == null) ? 0 : id.hashCode());
            result = prime * result + ((name == null) ? 0 : name.hashCode());
            return result;
        }
    
        /* (non-Javadoc)
         * @see java.lang.Object#equals(java.lang.Object)
         */
        @Override
        public boolean equals(Object obj) {
            if (this == obj) {
                return true;
            }
            if (obj == null) {
                return false;
            }
            if (!(obj instanceof StudentMTMPK)) {
                return false;
            }
            StudentMTMPK other = (StudentMTMPK) obj;
            if (id == null) {
                if (other.id != null) {
                    return false;
                }
            } else if (!id.equals(other.id)) {
                return false;
            }
            if (name == null) {
                if (other.name != null) {
                    return false;
                }
            } else if (!name.equals(other.name)) {
                return false;
            }
            return true;
        }
    }
    

    Address Class

    package com.mumz.test.jpa.embedded.manytomany;
    
    import javax.persistence.Column;
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.GenerationType;
    import javax.persistence.Id;
    import javax.persistence.Table;
    
    @Entity
    @Table(name="ADDRESS")
    public class Address {
        private Integer id = null;
        private String addressDetails = null;
    
        /**
         * @return the id
         */
        @Id
        @GeneratedValue(strategy=GenerationType.AUTO)
        @Column(name="ADDRESS_ID")
        public Integer getId() {
            return id;
        }
    
        /**
         * @param id the id to set
         */
        public void setId(Integer id) {
            this.id = id;
        }
    
        /**
         * @return the addressDetails
         */
        @Column(name="ADDRESS_DETAILS")
        public String getAddressDetails() {
            return addressDetails;
        }
    
        /**
         * @param addressDetails the addressDetails to set
         */
        public void setAddressDetails(String addressDetails) {
            this.addressDetails = addressDetails;
        }
    
        /* (non-Javadoc)
         * @see java.lang.Object#hashCode()
         */
        @Override
        public int hashCode() {
            final int prime = 31;
            int result = 1;
            result = prime * result + ((addressDetails == null) ? 0 : addressDetails.hashCode());
            result = prime * result + ((id == null) ? 0 : id.hashCode());
            return result;
        }
    
        /* (non-Javadoc)
         * @see java.lang.Object#equals(java.lang.Object)
         */
        @Override
        public boolean equals(Object obj) {
            if (this == obj) {
                return true;
            }
            if (obj == null) {
                return false;
            }
            if (!(obj instanceof Address)) {
                return false;
            }
            Address other = (Address) obj;
            if (addressDetails == null) {
                if (other.addressDetails != null) {
                    return false;
                }
            } else if (!addressDetails.equals(other.addressDetails)) {
                return false;
            }
            if (id == null) {
                if (other.id != null) {
                    return false;
                }
            } else if (!id.equals(other.id)) {
                return false;
            }
            return true;
        }
    }
    

    If you run this piece of code and try to save an instance of Address you will get

    Exception in thread "main" javax.persistence.PersistenceException: [PersistenceUnit: myJPAService] Unable to configure EntityManagerFactory
        at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:378)
        at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:56)
        at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:63)
        at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:47)
        at com.mumz.test.jpa.embedded.manytomany.EmbeddableTestMainApp.main(EmbeddableTestMainApp.java:9)
    Caused by: org.hibernate.AnnotationException: A Foreign key refering com.mumz.test.jpa.embedded.manytomany.StudentMTM from com.mumz.test.jpa.embedded.manytomany.Address has the wrong number of column. should be 2
        at org.hibernate.cfg.annotations.TableBinder.bindFk(TableBinder.java:429)
        at org.hibernate.cfg.annotations.CollectionBinder.bindCollectionSecondPass(CollectionBinder.java:1460)
        at org.hibernate.cfg.annotations.CollectionBinder.bindManyToManySecondPass(CollectionBinder.java:1279)
        at org.hibernate.cfg.annotations.CollectionBinder.bindStarToManySecondPass(CollectionBinder.java:710)
        at org.hibernate.cfg.annotations.CollectionBinder$1.secondPass(CollectionBinder.java:645)
        at org.hibernate.cfg.CollectionSecondPass.doSecondPass(CollectionSecondPass.java:65)
        at org.hibernate.cfg.Configuration.originalSecondPassCompile(Configuration.java:1716)
        at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1423)
        at org.hibernate.cfg.Configuration.buildMappings(Configuration.java:1375)
        at org.hibernate.ejb.Ejb3Configuration.buildMappings(Ejb3Configuration.java:1519)
        at org.hibernate.ejb.EventListenerConfigurator.configure(EventListenerConfigurator.java:193)
        at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:1100)
        at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:282)
        at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:366)
    

    My manytomany in StudentMTM is broken.

    Now this piece will work as it should be:

    Student Class

    package com.mumz.test.jpa.embedded.manytomany;
    
    import java.util.Set;
    
    import javax.persistence.CascadeType;
    import javax.persistence.Column;
    import javax.persistence.Entity;
    import javax.persistence.Id;
    import javax.persistence.JoinColumn;
    import javax.persistence.JoinTable;
    import javax.persistence.ManyToMany;
    import javax.persistence.Table;
    
    @Entity
    @Table(name="STUDENT")
    public class StudentMTM {
    
        private StudentMTMPK    studentPK   = null;
        private Integer id = null;
        private Set<Address>      address     = null;
    
        public StudentMTM(StudentMTMPK studentPK, Set<Address> address) {
            super();
            this.studentPK = studentPK;
            this.address = address;
        }
    
        /**
         * @return the id
         */
        @Column(name="STUDENT_ID")
        public Integer getId() {
            return id;
        }
    
        /**
         * @param id the id to set
         */
        public void setId(Integer id) {
            this.id = id;
        }
    
        /**
         * @return the name
         */
        public String getName() {
            return studentPK.getName();
        }
    
        /**
         * @param name the name to set
         */
        public void setName(String name) {
            studentPK.setName(name);
        }
        /**
         * @param studentPK
         *            the studentPK to set
         */
        public void setStudentPK(StudentMTMPK studentPK) {
            this.studentPK = studentPK;
        }
    
        /**
         * @param address
         *            the address to set
         */
        public void setAddress(Set<Address> address) {
            this.address = address;
        }
    
        /**
         * @return the address
         */
        @ManyToMany(cascade = CascadeType.ALL)
        @JoinTable(name = "STUDENT_ADDRESS", joinColumns =
            {
                @JoinColumn(name = "STUDENT_ID")
            }, inverseJoinColumns =
            {
                @JoinColumn(name = "ADDRESS_ID")
            })
        public Set<Address> getAddress() {
            return address;
        }
    
        /**
         * @return the studentPK
         */
        @Id
        public StudentMTMPK getStudentPK() {
            return studentPK;
        }
    
        /*
         * (non-Javadoc)
         * 
         * @see java.lang.Object#hashCode()
         */
        @Override
        public int hashCode() {
            final int prime = 31;
            int result = 1;
            result = prime * result + ((studentPK == null) ? 0 : studentPK.hashCode());
            result = prime * result + ((address == null) ? 0 : address.hashCode());
            return result;
        }
    
        /*
         * (non-Javadoc)
         * 
         * @see java.lang.Object#equals(java.lang.Object)
         */
        @Override
        public boolean equals(Object obj) {
            if (this == obj) {
                return true;
            }
            if (obj == null) {
                return false;
            }
            if (!(obj instanceof StudentMTM)) {
                return false;
            }
            StudentMTM other = (StudentMTM) obj;
            if (studentPK == null) {
                if (other.studentPK != null) {
                    return false;
                }
            } else if (!studentPK.equals(other.studentPK)) {
                return false;
            }
            if (address == null) {
                if (other.address != null) {
                    return false;
                }
            } else if (!address.equals(other.address)) {
                return false;
            }
            return true;
        }
    }
    

    Student PK

    package com.mumz.test.jpa.embedded.manytomany;
    
    import java.io.Serializable;
    
    import javax.persistence.Column;
    import javax.persistence.Embeddable;
    
    @Embeddable
    public class StudentMTMPK implements Serializable{
        /**
         * 
         */
        private static final long serialVersionUID = 3686950547855931594L;
        private String name = null;
    
        public StudentMTMPK(String name) {
            this.name = name;
        }
    
        /**
         * @return the name
         */
        @Column(name="STUDENT_NAME")
        public String getName() {
            return name;
        }
    
        /**
         * @param name the name to set
         */
        public void setName(String name) {
            this.name = name;
        }
    
        /* (non-Javadoc)
         * @see java.lang.Object#hashCode()
         */
        @Override
        public int hashCode() {
            final int prime = 31;
            int result = 1;
            result = prime * result + ((name == null) ? 0 : name.hashCode());
            return result;
        }
    
        /* (non-Javadoc)
         * @see java.lang.Object#equals(java.lang.Object)
         */
        @Override
        public boolean equals(Object obj) {
            if (this == obj) {
                return true;
            }
            if (obj == null) {
                return false;
            }
            if (!(obj instanceof StudentMTMPK)) {
                return false;
            }
            StudentMTMPK other = (StudentMTMPK) obj;
            if (name == null) {
                if (other.name != null) {
                    return false;
                }
            } else if (!name.equals(other.name)) {
                return false;
            }
            return true;
        }
    }
    

    Address Class – No change from the first version.

    In the second version JoinColumn is part of Student and mapping knows where it is mapping to.

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

I want to do something like this: create table app_users ( app_user_id smallint(6) not
I want to implement the following constraints in mysql: create table TypeMapping( ... constraint
I have a organization name table with the following structure given below: CREATE TABLE
I want to create a table of friends with personal information and log on
I want to create a table like myTable = { [0] = { [a]
I want to create a table in MS SQL Server 2005 to record details
I want to create a table structure with checkbox for each row and each
i want to create a table : products which looks like (these are columns
I would want to create a table with the same widths (table and its
How to select a same database? I want to create a table from already

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.