Reputation: 23
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
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
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