• 自动秒收录
  • 软件:1974
  • 资讯:4527|
  • 收录网站:301505|

IT精英团

一对多双向关联与级联操作

一对多双向关联与级联操作

作者/景文

一对多双向关联与级联操作

作者/景文

image.png

在编写程序前导入相应的*.jar包已经数据库的驱动包,配置persistence.xml配置文件
JPA规范:一对多 多的一方为关系维护端 它们互相持有对方的引用 谁是关系维护端谁负责外键维护,被维护端没有权利对外键操作 外键在关系维护端

<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
version="1.0"><property name="hibernate.connection.url"
value="jdbc:mysql://localhost:3306/student?useUnicode=true&characterEncoding=UTF-8" />】
本例来自itcast
第一步:编写一个Order。java和OrderItem.java
Order。java
@Entity
@Table(name="orders")
public class Order {
private String orderId;
private Float account=0f;
private SetorderItem=new HashSet();
/** CascadeType.REFRESH 级联刷新
* CascadeType.PERSIST 级联插入,只有在调用persist方法时才有作用
* CascadeType.MERGE 级联更新,只有在调用merge方法时才有作用
* CascadeType.REMOVE 级联删除,只有在调用remove方法时才有作用
* CascadeType.All 包括全部
* fetch=FetchType.LAZY延迟加载(在many情况下,默认是延迟加载,在one情况下,默认是立即加载)
* mappedBy="order"表示这个类是 关系被维护端,指明该实体内被维护的属性为order
**/
@OneToMany(cascade={CascadeType.PERSIST,CascadeType.MERGE,CascadeType.REFRESH,CascadeType.REMOVE},fetch=FetchType.LAZY,mappedBy="order")
public SetgetOrderItem() {
return orderItem;
}
public void setOrderItem(SetorderItem) {
this.orderItem = orderItem;
}
@Id @Column(length=10)
public String getOrderId() {
return orderId;
}
public void setOrderId(String orderId) {
this.orderId = orderId;
}
@Column(nullable=false)
public Float getAccount() {
return account;
}
public void setAccount(Float account) {
this.account = account;
}
public void addOrderItem(OrderItem orderItem)
{
orderItem.setOrder(this);
this.orderItem.add(orderItem);
}
}
OrderItem.java
@Entity
public class OrderItem {
private String produce;
private Float priceProduce=0f;
private Integer id;
private Order order;
@Column(length=20,nullable=false)
public String getProduce() {
return produce;
}
public void setProduce(String produce) {
this.produce = produce;
}
@Column(nullable=false)
public Float getPriceProduce() {
return priceProduce;
}
public void setPriceProduce(Float priceProduce) {
this.priceProduce = priceProduce;
}
@Id @GeneratedValue(strategy=GenerationType.AUTO)
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
/**
* 多的一方不需要 级联保存,不需要级联删除
* optional=true表示可选,表示此项可以为空
**/
@ManyToOne(cascade={CascadeType.MERGE,CascadeType.REFRESH},optional=true)
@JoinColumn(name="oerder_id")//外键名称order_id
public Order getOrder() {
return order;
}
public void setOrder(Order order) {
this.order = order;
}
}
第二步:编写单元测试
@Test
public void save()
{
EntityManagerFactory factory=Persistence.createEntityManagerFactory("person");
EntityManager entity=factory.createEntityManager();
entity.getTransaction().begin();
Order order=new Order();
order.setAccount(100f);
order.setOrderId("111");
OrderItem orderItem=new OrderItem();
orderItem.setPriceProduce(300f);
orderItem.setProduce("篮球");
OrderItem orderItem1=new OrderItem();
orderItem1.setPriceProduce(300f);
orderItem1.setProduce("足球");
order.addOrderItem(orderItem);
order.addOrderItem(orderItem1);
entity.persist(order);
entity.getTransaction().commit();
entity.close();
factory.close();
}
第三:运行单元测试生成表结构两张表见数据库
代码见附件:

标签:数据库 xml java
点击这里复制本文地址 以上内容由IT精英团整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表
退出阅读|首页