2017-08-01 102 views
0

在执行一个关系休眠程序获得以下错误包含1-M的关系休眠关系代码

package com.Employee.Employee; 

import javax.persistence.Column; 
import javax.persistence.Entity; 
import javax.persistence.GeneratedValue; 
import javax.persistence.Id; 
import javax.persistence.JoinColumn; 
import javax.persistence.ManyToOne; 
import javax.persistence.Table; 

import com.Employee.Department.Department; 

@Entity 
@Table(name = "Employee_1toMany") 
public class Employee { 
    @Id 
    @GeneratedValue 
    @Column(name = "EId") 
    private int emp_id; 
    @Column(name = "EName") 
    private String name; 
    private Department dept; 

    public int getEmp_id() { 
     return emp_id; 
    } 
    public void setEmp_id(int emp_id) { 
     this.emp_id = emp_id; 
    } 
    public String getName() { 
     return name; 
    } 
    public void setName(String name) { 
     this.name = name; 
    } 
    @ManyToOne 
    @JoinColumn(name = "DepartmentID") 
    public Department getDept() { 
     return dept; 
    } 
    public void setDept(Department dept) { 
     this.dept = dept; 
    } 
} 

Department.java:包含M对1的关系

package com.Employee.Department; 

import java.util.List; 

import javax.persistence.CascadeType; 
import javax.persistence.Column; 
import javax.persistence.Entity; 
import javax.persistence.FetchType; 
import javax.persistence.GeneratedValue; 
import javax.persistence.Id; 
import javax.persistence.OneToMany; 
import javax.persistence.Table; 

import com.Employee.Employee.Employee; 

@Entity 
@Table(name = "Department_1toMany") 
public class Department { 
    @Id 
    @GeneratedValue 
    @Column(name = "DId") 
    private int Dept_id; 
    @Column(name = "DName") 
    private String Dept_name; 
    private List<Employee> emp; 

    public int getDept_id() { 
     return Dept_id; 
    } 
    public void setDept_id(int dept_id) { 
     Dept_id = dept_id; 
    } 
    public String getDept_name() { 
     return Dept_name; 
    } 
    public void setDept_name(String dept_name) { 
     Dept_name = dept_name; 
    } 
    @OneToMany(targetEntity = Employee.class, mappedBy = "dept", cascade = CascadeType.ALL, fetch = FetchType.EAGER) 
    public List<Employee> getEmp() { 
     return emp; 
    } 
    public void setEmp(List<Employee> emp) { 
     this.emp = emp; 
    } 
} 

MainClass.java:

package com.Employee.MainClass; 

import org.hibernate.Session; 
import org.hibernate.SessionFactory; 
import org.hibernate.Transaction; 
import org.hibernate.cfg.Configuration; 

import com.Employee.Department.Department; 
import com.Employee.Employee.Employee; 

public class MainApp { 
    public static void main(String[] args) { 
     SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory(); 
     Session session = sessionFactory.openSession(); 
     Transaction tx = session.beginTransaction(); 

     Department dept = new Department(); 
     dept.setDept_name("Modern College"); 

     Employee emp1 = new Employee(); 
     emp1.setName("Rakesh"); 
     Employee emp2 = new Employee(); 
     emp2.setName("Sagar"); 

     emp1.setDept(dept); 
     emp2.setDept(dept); 

     session.save(dept); 
     session.save(emp1); 
     session.save(emp2); 

     tx.commit(); 
    } 
} 

hibernate.cfg.xml中:这是配置类

<?xml version="1.0" encoding="utf-8"?> 
<!DOCTYPE hibernate-configuration SYSTEM "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> 
<hibernate-configuration> 
    <session-factory> 
     <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> 
     <property name="hibernate.connection.username">root</property> 
     <property name="hibernate.connection.password">root</property> 
     <property name="hibernate.connection.url">jdbc:mysql://localhost/EMP_PRACTISE</property> 
     <property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property> 
     <property name="hibernate.hbm2ddl.auto">create</property> 
     <property name="hibernate.show_sql">true</property> 
     <mapping class="com.Employee.Department.Department"></mapping> 
     <mapping class="com.Employee.Employee.Employee"></mapping> 
    </session-factory> 
</hibernate-configuration> 

异常详细:

Exception in thread "main" org.hibernate.MappingException: Could not determine type for: com.Employee.Department.Department, at table: Employee, for columns: [org.hibernate.mapping.Column(dept)] 
    at org.hibernate.mapping.SimpleValue.getType(SimpleValue.java:455) 
    at org.hibernate.mapping.SimpleValue.isValid(SimpleValue.java:422) 
    at org.hibernate.mapping.Property.isValid(Property.java:226) 
    at org.hibernate.mapping.PersistentClass.validate(PersistentClass.java:597) 
    at org.hibernate.mapping.RootClass.validate(RootClass.java:265) 
    at org.hibernate.boot.internal.MetadataImpl.validate(MetadataImpl.java:329) 
    at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:451) 
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:710) 
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:726) 
    at com.Employee.MainClass.MainApp.main(MainApp.java:13) 

回答

0

我相信你不能混用字段和getter方法注释。将它们放到相应的字段中。

Employee.java

@ManyToOne 
@JoinColumn(name = "DepartmentID") 
private Department dept; 

// mapping annotation on the field 
public Department getDept() { 
    return dept; 
} 

Department.java

@OneToMany(targetEntity = Employee.class, mappedBy = "dept", cascade = CascadeType.ALL, fetch = FetchType.EAGER) 
private List<Employee> emp; 

// mapping annotation on the field 
public List<Employee> getEmp() { 
    return emp; 
} 
+0

是的,你说得对,我们不能混用领域和getter方法的注释。注释需要在现场级别声明。 –