2015-09-07 3 views
0

При выполнении следующих программ я получаю ошибкуMappingException: Тип не может быть определена для java.util.Set

org.hibernate.MappingException: Не удалось определить тип для: java.util.Set, для колонки: [org.hibernate.mapping.Column (ListOfAddress)]

Я добавил import javax.persistence.ElementCollection; Но я получаю ту же ошибку

Может кто-нибудь пожалуйста, предложить мне любой вариант?

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> 

ответ

1

Я думаю, что ваши смешивают понятия. Вы пытаетесь использовать аннотацию @Embeddable в классе, который используется в отношении many-to-one. Это и есть причина вашей ошибки.

Если вы хотите использовать ListOfAddress в качестве коллекции элементов, вы должны определить Address как субъекта, а также и правильно настроить отношения, например:

... 
@ElementCollection 
@CollectionTable(name="address", [email protected](name="userId")) 
@Column(name="addresses") 
private Set<Address> ListOfAddress = new HashSet<Address>(); 
... 

А Адрес класса

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

Есть много примеров через Интернет.

+0

Спасибо за ответ И после использования столбцов соединения также получите ту же ошибку. Я хочу создать файл сопоставления вместо использования mapplig claa –

+0

Мои аннотации были предложением, примером того, как вы могли сделать сопоставление. Вы должны адаптироваться к вашему коду. Если вы ищете google для «hibernate one to many annotations example», вы найдете несколько хороших примеров того, что вы хотите сделать. – malaguna

0

Я столкнулся с аналогичной проблемой, когда я изменил версию java-компилятора с 1.6 до 1.5, это сработало для меня.

SO, вероятно, проверьте, действительно ли это в вашем случае

Смежные вопросы