org.hibernate.MappingException 同时将集合存储在 hibernate 中



以下是我的实体类

@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;
}
}

以下是地址类

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)

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

编辑:

还有一个问题。我是否使用正确的代码来获取我的休眠版本的会话工厂作为我的IDE,将ServiceRegistryBuilder类显示为已弃用。感谢您的帮助。

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;
    }
}

最新更新