JPA学习笔记2
来源:互联网 发布:centos入门到精通 编辑:程序博客网 时间:2024/06/01 08:47
1.一对多的映射关系
demo:订单和订单项规范: 多的一方维护外键的更新(关系维护端),一的一方没有权利更新外键(被维护关系端)
1.Cascade级联操作类型:(使用前提是对应的实体管理方法),当对某实体进行某操作时,会同时对具有映射关系的实体其相应操作
REFRESH:获取最新的数据
PERSIST:保存
MERGE:更新
REMOVEL:删除
2.加载类型为懒惰加载(碰到某人many的加载类型为延迟加载,碰到one便立即加载)
3.被维护端关系实体会出现mappedby(外键字段)
2.demo:订单和订单项
1.实体bean Order和OrderItem
@Entity@Table(name="orders")public class Order {/** * 订单编号 */private String orderId;/** * 订单总价 */private Double cost=0d;/** * 订单项 */private Set<OrderItem> items=new HashSet<OrderItem>();/** * @return the orderId */@Id @Column(length=36)public String getOrderId() {return orderId;}/** * @param orderId the orderId to set */public void setOrderId(String orderId) {this.orderId = orderId;}/** * @return the cost */@Column(nullable=false)public Double getCost() {return cost;}/** * @param cost the cost to set */public void setCost(Double cost) {this.cost = cost;}/** * @return the items */@OneToMany(cascade={CascadeType.REFRESH,CascadeType.PERSIST,CascadeType.REMOVE,CascadeType.MERGE},mappedBy="order")public Set<OrderItem> getItems() {return items;}/** * @param items the items to set */public void setItems(Set<OrderItem> items) {this.items = items;}/** * 增加订单项 * @param oi */public void addItems(OrderItem oi){this.items.add(oi);oi.setOrder(this);}}
@Entitypublic class OrderItem {/** * 订单项编号 */private Integer itemId;/** * 商品名称 */private String productName;/** * 商品价格 */private Double price=0d;/** * 所属订单 */private Order order;/** * @return the productName */@Column(length=40,nullable=false)public String getProductName() {return productName;}/** * @param productName the productName to set */public void setProductName(String productName) {this.productName = productName;}/** * @return the price */@Column(nullable=false)public Double getPrice() {return price;}/** * @param price the price to set */public void setPrice(Double price) {this.price = price;}/** * @return the itemId */@Id @GeneratedValuepublic Integer getItemId() {return itemId;}/** * @param itemId the itemId to set */public void setItemId(Integer itemId) {this.itemId = itemId;}/** * @return the order * 只需要级联更新 * optional=false,代表必须存在外键字段 */@ManyToOne(cascade={CascadeType.MERGE,CascadeType.REFRESH},fetch=FetchType.EAGER,optional=false)@JoinColumn(name="orderId")public Order getOrder() {return order;}/** * @param order the order to set */public void setOrder(Order order) {this.order = order;}}2.单元测试
public class OneToManyTest {@Testpublic void test(){EntityManagerFactory factory=Persistence.createEntityManagerFactory("MyJpa");factory.close();}@Testpublic void save(){EntityManagerFactory factory=Persistence.createEntityManagerFactory("MyJpa");EntityManager em=factory.createEntityManager();em.getTransaction().begin();Order order=new Order();order.setOrderId(UUID.randomUUID().toString());OrderItem item1=new OrderItem();item1.setProductName("Mac pro");item1.setPrice(9000d);OrderItem item2=new OrderItem();item2.setProductName("X1");item2.setPrice(10000d);OrderItem item3=new OrderItem();item3.setProductName("air");item3.setPrice(7000d);order.addItems(item1);order.addItems(item2);order.addItems(item3);order.setCost(26000d);em.persist(order);em.getTransaction().commit();em.close();factory.close();}@Testpublic void update(){EntityManagerFactory factory=Persistence.createEntityManagerFactory("MyJpa");EntityManager em=factory.createEntityManager();em.getTransaction().begin();Order order=em.find(Order.class, "57372f24-ada7-4c66-b410-ad2aa2cca23b");Set<OrderItem> sets=order.getItems();for (OrderItem orderItem : sets) {if(orderItem.getProductName().equals("air")){orderItem.setPrice(7888d);}}order.setCost(26888d);em.getTransaction().commit();em.close();factory.close();}//删除同上操作....@Testpublic void test1(){System.out.println(UUID.randomUUID().toString());}}
- JPA学习笔记2
- JPA学习笔记-JPA基础
- JPA学习笔记-JPA进阶
- JPA学习笔记2——JPA高级
- JPA学习笔记2——JPA高级
- JPA学习笔记2——JPA高级
- JPA学习笔记2——JPA高级
- JPA学习笔记(2)——创建JPA项目
- JPA学习笔记2——JPA高级
- JPA学习笔记(2)——创建JPA项目
- JPA学习笔记2——JPA高级
- JPA学习笔记(2)——创建JPA项目
- jpa学习笔记——2
- JPA学习笔记
- JPA学习笔记
- JPA学习笔记 [壹]
- JPA学习笔记
- jpa学习笔记
- 加载位图2
- 有趣的谜语
- CONST的用法及常见问题
- 美妙的微机原理2013/4/23
- 字节数组转成16进制表示
- JPA学习笔记2
- 关于虚函数与继承
- PHP超全局变量
- RetentionPolicy CLASS vs. RUNTIME
- c# “Could not load type”(无法加载类型)错误信息
- hdu1733(Escape)
- 国内项目PK对日外包 自己的经历 (转)
- 整数划分的 结题报告
- MFC画刷2