Surendar S
Surendar S

Reputation: 23

MappingException: Type can not be determined for java.util.Set

While running following program I am getting the error

org.hibernate.MappingException: Could not determine type for: java.util.Set, for columns: [org.hibernate.mapping.Column(ListOfAddress)]

I added the import javax.persistence.ElementCollection; But I am getting the same error

Can anyone please suggest me any option?

HibernateTest.java

package src.com.hibernate.main;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;
import org.hibernate.mapping.*;
import src.com.hibernate.Address;
import src.com.hibernate.UserDetails;

public class HibernateTest {

    public static void main(String[] args) 
    {
        UserDetails user = new UserDetails();
        user.setUserName("Surendar");

        Address addr = new Address();
        addr.setStreet("Abith colony");
        addr.setCity("Chennai");
        addr.setState("TamilNAdu");
        addr.setPincode("600015");  

        Address addr1= new Address();
        addr1.setStreet("Anna Salai");
        addr1.setCity("Chennaimain");
        addr1.setState("TN");
        addr1.setPincode("600033");

        user.getListOfAddress().add(addr);
        user.getListOfAddress().add(addr1);

        SessionFactory sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();
        Session session = sessionFactory.openSession();
        session.beginTransaction();
        session.save(user);
        session.getTransaction().commit();
        session.close();

    }

}

UserDetails.java

      package src.com.hibernate;


        import java.util.HashSet;
        import java.util.Set;

        import javax.persistence.ElementCollection;
        import javax.persistence.Entity;
        import javax.persistence.GeneratedValue;
        import javax.persistence.GenerationType;
        import javax.persistence.Id;
        import javax.persistence.Table;

        @Entity
        @Table(name="UserTABLEaddress")
        public class UserDetails 
        {

            @Id
            @GeneratedValue(strategy=GenerationType.AUTO)
            private int userId;     
            private String userName;

            @SuppressWarnings("rawtypes")
            @ElementCollection
            private Set<Address> ListOfAddress = new HashSet();

            public Set<Address> getListOfAddress() {
                return ListOfAddress;
            }
            public void setListOfAddress(Set<Address> listOfAddress) {
                ListOfAddress = listOfAddress;
            }
            public int getUserId() {
                return userId;
            }
            public void setUserId(int userId) {
                this.userId = userId;
            }
            public String getUserName() {
                return userName;
            }
            public void setUserName(String userName) {
                this.userName = userName;
            }

Address.java

      package src.com.hibernate;
      import javax.persistence.Embeddable;

      @Embeddable
      public class Address 
         {

private String street;

private String city;

private String state;

private String pincode;
public String getStreet() {
    return street;
}
public void setStreet(String street) {
    this.street = street;
}
public String getCity() {
    return city;
}
public void setCity(String city) {
    this.city = city;
}
public String getState() {
    return state;
}
public void setState(String state) {
    this.state = state;
}
public String getPincode() {
    return pincode;
}
public void setPincode(String pincode) {
    this.pincode = pincode;
}

}

Hibernate.cfg.xml

<?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE hibernate-configuration PUBLIC
    "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
    "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

    <hibernate-configuration>
    <session-factory>
    <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
    <property name="connection.url">jdbc:mysql://localhost:3306/hibernate</property>
    <property name="connection.username">root</property>
    <property name="connection.password"></property>
    <property name="show_sql">true</property>
    <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
    <property name="hbm2ddl.auto">create</property>
    <mapping class="src.com.hibernate.UserDetails"/>
    </session-factory>
    </hibernate-configuration>

Upvotes: 0

Views: 381

Answers (2)

Kalyan
Kalyan

Reputation: 1

I faced similar problem, when i changed my java compiler version from 1.6 to 1.5 it worked for me.

SO probably check if that is the case with you

Upvotes: 0

malaguna
malaguna

Reputation: 4233

I think your are mixing concepts. You try to use @Embeddable annotation in a class that is used in a many-to-one relationship. That is the cause of your error.

If you want to use ListOfAddress as an element collection, you have to define Address as an entity as well and configure the relationship correctly, for example:

...
@ElementCollection
@CollectionTable(name="address", joinColumns=@JoinColumn(name="userId"))
@Column(name="addresses")
private Set<Address> ListOfAddress = new HashSet<Address>();
...

And in Address Class

@Entity
@Table(name="address")
public class Address 
...

There are plenty of examples through internet.

Upvotes: 1

Related Questions