2015-07-05 24 views
0

我要盡我的兩類客戶之間的映射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:UML

+0

爲什麼你混合註釋映射和xml映射,如果您不想映射它們,則可以將屬性標記爲@Transient。 – kevcodez

+0

實際上我試圖在不嘗試映射類型「customerGroup」之前使用hibernate。然後,我擴展到「Customergroup」類型 - 它沒有工作,所以然後我試圖映射它們。 –

回答

1

假設類CustomerGroup reprsents CustomerGroup表在數據庫中,添加下面提及的註釋:

@Entity 
@Table(name="CustomerGroup") 
public class CustomerGroup 
+0

仍然收到相同的錯誤。也許錯誤在Customer.hbm.xml中?映射可能有錯誤。 –

+0

您在這裏混合xml-mapping和註解。在你的情況下,註釋本身就足夠了。首先從休眠配置文件中刪除'customer.hbm.xml'。 – Arpit

+0

好吧,我刪除了hibernate.cfg.xml中的所有xml映射源。現在得到另一個錯誤:org.hibernate.MappingException:未知實體:studyproject.Customer –

0

你必須告訴Hibernate你想Customer之間哪種協會和CustomerGroup:一對一或多對一。

另外,默認情況下,所有屬性都通過JPA標準映射(這就是爲什麼Hibernate必須遵守它,如果您使用JPA註釋)。

如果你想使屬性短暫,你必須明確地做到這一點:

@Transient 
public BonusPackage getBonusPackage() { 
    return bonusPackage; 
} 
+0

仍然具有相同的錯誤消息:線程「AWT-EventQueue-0」中的異常org.hibernate.MappingException:無法確定類型:studyproject.CustomerGroup,位於表:CUSTOMER,位於列:[org.hibernate.mapping.Column (assignedTo)] –

+0

請參閱我編輯的答案。對不起,我一開始並沒有看到實際的錯誤。儘管如此,「@瞬間」的評論依然存在。 –

+0

我是否理解對@OneToOne關聯我需要外鍵?事實並非如此。爲了說明我的環境,我已經在這裏上傳了一個UML:http://fs2.directupload.net/images/150705/2fahgyk2.jpg通常CustomerGroup在客戶類中添加了一個方法。 (this.customerGroups.add(new CustomerGroup(......)); –

相關問題