gpt4 book ai didi

java - 在 hibernate 中存储集合时出现 org.hibernate.MappingException

转载 作者:行者123 更新时间:2023-11-30 04:06:16 26 4
gpt4 key购买 nike

以下是我的实体类

@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作为数据库。如果我不使用集合,那么它可以用于休息。代码有什么问题。

编辑:

还有一个问题。我是否使用正确的代码为我的 hibernate 版本获取 SessionFactory ,因为我的 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;
}

}

关于java - 在 hibernate 中存储集合时出现 org.hibernate.MappingException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20655865/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com