JPA one to many

[b]1. one to many:[/b]

[b]1.1 db tables:[/b]
CREATE TABLE customer
(
customer_id bigint NOT NULL,
adresse VARCHAR (255) NOT NULL,
city VARCHAR (255) NOT NULL,
name VARCHAR (255) NOT NULL,
phone VARCHAR (255) NOT NULL,
state VARCHAR (255) NOT NULL,
tax_id INTEGER NOT NULL,
zip VARCHAR (255) NOT NULL,
PRIMARY KEY (customer_id)
);


CREATE TABLE customer_order
(
order_id bigint NOT NULL,
date_placed DATE NOT NULL,
date_promised DATE,
status VARCHAR (255) NOT NULL,
terms VARCHAR (255) NOT NULL,
customer_id bigint,
PRIMARY KEY (order_id)
);

ALTER TABLE customer_order ADD CONSTRAINT FK86DB8BAD595591FB FOREIGN KEY (customer_id) REFERENCES customer


[b]1.2 Customer class ( one side)[/b]
@OneToMany(mappedBy = "customer",cascade = CascadeType.ALL, fetch = FetchType.LAZY)
private List<CustomerOrder> CustomerOrders;


[b]1.3 CustomerOrder ( many side )[/b]

@ManyToOne(fetch=FetchType.EAGER) //fetch=FetchType.LAZY or EAGER
@JoinColumn(name="customer_id")
//@Fetch(FetchMode.JOIN)
private Customer customer;

Keys: a. cascade -> ALL: save customer will also save orders of it.
b. fetch = FetchType.LAZY: lazy loading, if you want the order loaded with customer, you have
to access it like this:

public Customer getCustomerAndOrdersById(Long id) {

Customer customer = customerDao.getById(id);
for (CustomerOrder c : customer.getCustomerOrders())
; // no n+1 issue.
}

c. If fetch = FetchType.EAGER: no problem. It is alway loaded with customer loading.

[b]1.4 If you remove the[/b] ,cascade = CascadeType.ALL, you have to save both customer and his orders
manually, and load them separately.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值