我要盡我的兩類客戶之間的映射CustomerGroup和我收到此錯誤:Hibernate映射例外:無法確定類型的列
Exception in thread "AWT-EventQueue-0" org.hibernate.MappingException: Could not determine type for: studyproject.CustomerGroup, at table: CUSTOMER, for columns: [org.hibernate.mapping.Column(assignedTo)]
我CustomerGroup類是:(FYI:在開始的時候我不需要BonusPackage類型,因此我沒有註釋的話)
package studyproject;
import javax.persistence.Column;
import javax.persistence.Id;
public class CustomerGroup {
private String name;
private String description;
private int id;
private BonusPackage bonusPackage;
public CustomerGroup(int id,String name, String description,
BonusPackage bonusPackage) {
super();
this.id=id;
this.name = name;
this.description = description;
this.bonusPackage = bonusPackage;
}
@Column(name="id")
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
@Column(name="name")
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Column(name="description")
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
@Transient
public BonusPackage getBonusPackage() {
return bonusPackage;
}
public void setBonusPackage(BonusPackage bonusPackage) {
this.bonusPackage = bonusPackage;
}
@Transient
public boolean generateServiceMails() {
return false;
}
客戶類:
@Entity
@Table(name="CUSTOMER")
public class Customer {
private int id;
private String forename;
private String surname;
private char gender;
private Date birthday;
private double generatedProfitsTotal;
private double generatedProfitsLastYear;
private CustomerGroup assignedTo;
public Customer(int id, String forename, String surname, char gender,
Date birthday) {
super();
this.id = id;
this.forename = forename;
this.surname = surname;
this.gender = gender;
this.birthday = birthday;
}
@Id
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
@Column(name = "forename")
public String getForename() {
return forename;
}
public void setForename(String forename) {
this.forename = forename;
}
@Column(name = "surename")
public String getSurname() {
return surname;
}
public void setSurname(String surname) {
this.surname = surname;
}
@Column(name = "gender")
public char getGender() {
return gender;
}
public void setGender(char gender) {
this.gender = gender;
}
@Column(name = "birthday")
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
@Column(name = "generatedProfitsTotal")
public double getGeneratedProfitsTotal() {
return generatedProfitsTotal;
}
public void setGeneratedProfitsTotal(double generatedProfitsTotal) {
this.generatedProfitsTotal = generatedProfitsTotal;
}
@Column(name = "generatedProfitsLastYear")
public double getGeneratedProfitsLastYear() {
return generatedProfitsLastYear;
}
public void setGeneratedProfitsLastYear(double generatedProfitsLastYear) {
this.generatedProfitsLastYear = generatedProfitsLastYear;
}
@OneToOne(fetch = FetchType.LAZY, mappedBy = "id", cascade = CascadeType.ALL)
public CustomerGroup getAssignedTo() {
return assignedTo;
}
public void setAssignedTo(CustomerGroup assignedTo) {
this.assignedTo = assignedTo;
}
是提交事務的方法:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
<hibernate-mapping>
<class name="studyproject.Customer"
table="CUSTOMER">
<id name="id" type="int">
<column name="ID"/>
<generator class="assigned"/>
</id>
<property name="forename" type="java.lang.String">
<column name="FORENAME"/>
</property>
<property name="surname" type="java.lang.String">
<column name="SURNAME"/>
</property>
<property name="gender" type="java.lang.Character">
<column name="GENDER"/>
</property>
<property name="birthday" type="java.util.Date">
<column name="birthday"/>
</property>
property name="generatedProfitsTotal" type="java.lang.Double">
<column name="generatedProfitsTotal"/>
</property>
<property name="generatedProfitsLastYear" type="java.lang.Double">
<column name="generatedProfitsLastYear"/>
</property>
<property name = "assignedTo" type ="studyproject.CustomerGroup">
<column name="assignedTo" />
</property>
</class>
</hibernate-mapping>
我檢查了幾個常見問題和其他線程在這裏計算器
public String saveAllDataORM(){
Configuration configuration = new Configuration().configure();
ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().
applySettings(configuration.getProperties()).build();
SessionFactory sessionFactory = configuration.buildSessionFactory(serviceRegistry);
Session session = sessionFactory.openSession();
Transaction transaction = session.beginTransaction();
for(Customer c:this.getCustomers()) {
session.persist(c);
}
transaction.commit();
session.close();
return "Done";
}
我customer.hbm.xml文件,主要是有一個與註釋的問題。我試圖修復它在我的代碼,但我不能做到..:/
爲了更好地說明我這裏有一個UML:
爲什麼你混合註釋映射和xml映射,如果您不想映射它們,則可以將屬性標記爲@Transient。 – kevcodez
實際上我試圖在不嘗試映射類型「customerGroup」之前使用hibernate。然後,我擴展到「Customergroup」類型 - 它沒有工作,所以然後我試圖映射它們。 –