2013-12-18 27 views
1

以下是我的实体类org.hibernate.MappingException处于休眠存储收集

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

@Id 
private int userId; 
@Column (name="USER_NAME") 
private String userName; 
@Temporal(TemporalType.DATE) 
private Date date; 
@ElementCollection 
private Set<Address> streetAddress = new HashSet<Address>(); 


public Set<Address> getStreetAddress() { 
    return streetAddress; 
} 
public void setStreetAddress(Set<Address> streetAddress) { 
    this.streetAddress = streetAddress; 
} 
public Date getDate() { 
    return date; 
} 
public void setDate(Date date) { 
    this.date = date; 
} 
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类

public class Address { 

private String city; 
private String pin; 
public String getCity() { 
    return city; 
} 
public void setCity(String city) { 
    this.city = city; 
} 
public String getPin() { 
    return pin; 
} 
public void setPin(String pin) { 
    this.pin = pin; 
} 

} 

而且下面是主类

public class HibernateMain { 

public static void main(String[] args) { 

    Address address = new Address(); 
    address.setCity("Pune"); 
    address.setPin("1232"); 

    Address homeAddress = new Address(); 
    homeAddress.setCity("home_Pune"); 
    homeAddress.setPin("home_1232"); 

    UserDetails user = new UserDetails(); 
    user.setUserId(3); 
    user.setUserName("Second user"); 
    user.setDate(new Date()); 

    user.getStreetAddress().add(address); 
    user.getStreetAddress().add(homeAddress); 

    Configuration cfg = new Configuration().configure("hibernate.cfg.xml"); 

    SessionFactory sf = cfg.buildSessionFactory(new ServiceRegistryBuilder() 
          .applySettings(cfg.getProperties()).build()); 

    Session session = sf.openSession(); 
    session.beginTransaction(); 
    session.save(user); 
    session.getTransaction().commit(); 
    session.close(); 
} 
} 

的例外是在运行时抛出

Exception in thread "main" org.hibernate.MappingException: Could not determine type for: com.example.model.Address, at table: UserDetails_streetAddress, for columns: [org.hibernate.mapping.Column(streetAddress)] 
at org.hibernate.mapping.SimpleValue.getType(SimpleValue.java:336) 
at org.hibernate.mapping.SimpleValue.isValid(SimpleValue.java:310) 
at org.hibernate.mapping.Collection.validate(Collection.java:315) 
at org.hibernate.mapping.Set.validate(Set.java:40) 
at org.hibernate.cfg.Configuration.validate(Configuration.java:1362) 
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1849) 
at com.example.hibernate.HibernateMain.main(HibernateMain.java:36) 

我正在使用休眠4.3MySQL作为数据库。如果我不使用集合,那么它适用于休息。代码有什么问题。

编辑:

另外一个question.Am我使用权代码来获得SessionFactory的我休眠版本我的IDE显示为depricatedServiceRegistryBuilder类。 感谢您的帮助。

回答

2

address类必须使用映射注释进行注释。特别是,@Embeddable和必要时@Column映射到数据库中的相应列。

@Embeddable 
public class Address { 

    private String city; 
    private String pin; 

    public String getCity() { 
     return city; 
    } 
    public void setCity(String city) { 
     this.city = city; 
    } 
    public String getPin() { 
     return pin; 
    } 
    public void setPin(String pin) { 
     this.pin = pin; 
    } 

} 
+0

@axtavt感谢您的协助 –

+0

嘿谢谢。请您为编辑的问题提出建议。 –

+1

@PrashantShilimkar请参阅:http://stackoverflow.com/questions/8621906/is-buildsessionfactory-deprecated-in-hibernate-4 –