休眠简单直接映射

时间:2013-06-02 15:31:16

标签: hibernate postgresql annotations

我有2名员工和订单:Console screens_before execusion 现在我正在尝试映射列表集合以获取每个员工的所有订单。我的映射:

@Entity
@Table(name = "employees", schema = "public")
public class Employees implements java.io.Serializable {

         /**
          *
          */
         private static final long serialVersionUID = 1885071569771542035L;
         private short employeeid;
         //...

         private List<Orders> ordersList;
         @OneToMany(mappedBy = "employees")
         public List<Orders> getOrders() {
                 return ordersList;
         }

         public void setOrders(List<Orders> orders) {
                 this.ordersList = orders;
         }

@Entity
@Table(name = "orders", schema = "public")
public class Orders implements java.io.Serializable {

         /**
          *
          */
         private static final long serialVersionUID = 405644896073449066L;

         private short orderid;
         //...

         private Employees employees;

         @ManyToOne
         public Employees getEmployees() {
                 return employees;
         }

         public void setEmployees(Employees employees) {
                 this.employees = employees;
         }

         public Orders() {
         }

         public Orders(short orderid) {
                 this.orderid = orderid;
         }

但不幸的是我没有。我一直在尝试检测数据库的SQL查询,我认为hibernate会创建新列:sql result

可能需要参考:

orders0_.employeeid as employeeid1_0_,

不要

orders0_.employees_employeeid as employees15_1_0_,

但我不知道如何强迫他这样做。 (我正在使用postgresql)

1 个答案:

答案 0 :(得分:0)

您没有为用于映射关联的连接列指定任何名称,因此Hibernate使用默认值,如JPA规范中所指定的:employees_employeeid。要改为使用employeeid,你必须告诉Hibernate:它无法猜测它:

@ManyToOne
@JoinColumn(name = "employeeid")
public Employees getEmployees() {
    return employees;
}

此外,Employees的实例是单个员工,因此该类应命名为Employee,而不是Employees。订单相同。对于属性order.employees也是如此,这意味着订单有几个雇员,尽管它只有一个。该属性应命名为employee

@ManyToOne
@JoinColumn(name = "employeeid")
public Employee getEmployee() {
    return employee;
}