您的位置:首页 > 移动开发

Using JoinColumn, JPA using oneToMany mappedBy

2011-05-30 22:11 369 查看
有两个实体Order和Customer,一个用户可以有多个订单,一个订单属于一个用户,所以Customer与Order是一对多的关系,那么在Order实体里可以有一个到Customer的引用customer,同时在Customer里有一个Order实体的集合orders。如果在只是如下这样写:

public class Order {

    @id

    private long id;

 

    @ManyToOne

    private Customer customer;

 

    public void setId(long id) {

        this.id = id;

    }

 

    public long getId() {

        return this.id;

    }

 

    public void setCustomer(Customer customer) {

        this.customer = customer;

    }

 

    public Customer getCustomer() {

        return this.customer;

    }

}

 

public class Customer{

    @id

    private long id;

 

    @OneToMany

    private Set<Order> orders;

 

    public void setId(long id) {

        this.id = id;

    }

 

    public long getId() {

        return this.id;

    }

 

    public void setOrders(Set<Order> orders) {

        this.orders = orders;

    }

 

    public Set<Order> getOrders() {

        return this.orders;

    }

}

那么系统可能会自动生成一张Customer_Order关联表,可是事实上我们不需要这样的表,因为通过 Select order from Order order where order.customer.id=:id, 就可以找到某个Customer的Orders,而不需要另建一张表。要想去掉这个自动生成的表,要这样写:

public class Order {

    @id

    private long id;

 

    @ManyToOne

    @JoinColumn(name="customer", nullable=false)

    private Customer customer;

 

    public void setId(long id) {

        this.id = id;

    }

 

    public long getId() {

        return this.id;

    }

 

    public void setCustomer(Customer customer) {

        this.customer = customer;

    }

 

    public Customer getCustomer() {

        return this.customer;

    }

}

 

public class Customer{

    @id

    private long id;

 

    @OneToMany(mappedBy="customer")

    private Set<Order> orders;

 

    public void setId(long id) {

        this.id = id;

    }

 

    public long getId() {

        return this.id;

    }

 

    public void setOrders(Set<Order> orders) {

        this.orders = orders;

    }

 

    public Set<Order> getOrders() {

        return this.orders;

    }

}

多出一个mappedBy和JoinColumn, 就是告诉JPA实现者,orders是通过order里的customer映射来的,每次查找orders通过Order里的customer联接。这样就不会生成Customer_Order关联表了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  jpa class