在EJB3.0 规范中 多对一与一对多的双向关系, 多对一(就是@ManyToOne注解的这端,是多端哦不要搞混了)这端总是双向关联端的主题(owner)端, 而一对多端的关联注解为 @OneToMany(mappedBy=" " )其值是:多对一端的属性
demo:
被动方:其实也就是一方 或者说(OneToMany方)
@Entity
public class Customer extends AbstractEntity {
private String name;
@OneToMany(mappedBy="customer",cascade=CascadeType.ALL)
private Set<Order> orders;
public void addOrder(Order order){
if(orders == null){
orders = new HashSet<Order>();
}
orders.add(order);
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Set<Order> getOrders() {
return orders;
}
public void setOrders(Set<Order> orders) {
this.orders = orders;
}
}
主动方:1.关系的维护方2.ManyToOne方3.多方
@Entity
@Table(name="orders")
public class Order extends AbstractEntity {
private String name;
@ManyToOne(cascade=CascadeType.ALL)
private Customer customer;
public Customer getCustomer() {
return customer;
}
public void setCustomer(Customer customer) {
this.customer = customer;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
以上是实体
下面是测试用列哦
public void testCRUD() {
// 第一种情况: 调用的被动方的Dao 绑定主动方关系,但主动方没有绑定被动方
Customer entity = new Customer();
entity.setName("customer1");
Order order = new Order();
order.setName("order1");
entity.addOrder(order);
entity = customerDao.create(entity); // 这种情况下 orders.customer_id == null
//控制台的信息
//Hibernate: insert into Customer (name, id) values (?, ?)
//这里的customer_id 为null
//Hibernate: insert into orders (name, customer_id, id) values (?, ?, ?)
System.out.println("entity id = " + entity.getId());
System.out.println("order id = "+ order.getId());
System.out.println("1111********************** over");
// 第二种情况: 调用的被动方的Dao 绑定主动方关系,并且主动方也绑定被动方
entity = new Customer();
entity.setName("customer2");
order = new Order();
order.setName("order2");
entity.addOrder(order);
order.setCustomer(entity); //这里进行双向关联
entity = customerDao.create(entity);
//
//Hibernate: insert into Customer (name, id) values (?, ?)
//这里的customer_id 有值哦
//Hibernate: insert into orders (name, customer_id, id) values (?, ?, ?)
System.out.println("entity id = " + entity.getId());
System.out.println("order id = "+ order.getId());
System.out.println("2222********************** over");
// 第三种情况: 调用的主动方的Dao 绑定被动方关系,但是被东方不绑定主动方
entity = new Customer();
entity.setName("customer3");
order = new Order();
order.setName("order3");
order.setCustomer(entity); //绑定被动方
orderDao.create(order);
//Hibernate: insert into Customer (name, id) values (?, ?)
//Hibernate: insert into orders (name, customer_id, id) values (?, ?, ?)
System.out.println("entity id = " + entity.getId());
System.out.println("order id = "+ order.getId());
System.out.println("3333********************** over");
// 第四种情况: 调用的主动方的Dao 绑定被动方关系,并且被东方也绑定主动方
entity = new Customer();
entity.setName("customer4");
order = new Order();
order.setName("order4");
order.setCustomer(entity); //绑定被动方
orderDao.create(order);
System.out.println("entity id = " + entity.getId());
System.out.println("order id = "+ order.getId());
System.out.println("4444********************** over");
//Hibernate: insert into Customer (name, id) values (?, ?)
//Hibernate: insert into orders (name, customer_id, id) values (?, ?, ?)
//总结:经测验二三四种方法结果都是一样都能持久化到数据库,并且关系也建立好了
// 也就说只要主动方绑定了被动方关系就维护好了
}
*****************************************做级联删除测试************************************************************
public void testCascade(){
//1. 做个级联删除吧 测试删除主动方是否删除关联方
// 这里会级联删除主动方的关联对象,以及该关联对象(被动方)所关联的所有主动方都会被级联删除
orderDao.delete("order_id_1");
//Hibernate: delete from orders where id=?
// Hibernate: delete from orders where id=?
// Hibernate: delete from orders where id=?
// Hibernate: delete from orders where id=?
// Hibernate: delete from orders where id=?
// Hibernate: delete from Customer where id=?
assertNull( orderDao.findById("orderDao"));
//2. 做个级联删除吧 测试删除被动方是否删除关联方
//删除该被动方,以及所关联的所有主动方(维护关系方or多方)与上面的调用主动方的结果一样
//Hibernate: delete from orders where id=?
// Hibernate: delete from orders where id=?
// Hibernate: delete from orders where id=?
// Hibernate: delete from orders where id=?
// Hibernate: delete from orders where id=?
// Hibernate: delete from Customer where id=?
customerDao.delete("2");
assertNull( customerDao.findById("2"));
}
-----------------------------------------------------
@OneToMany(mappedBy="appointment",cascade=CascadeType.ALL)
@OrderBy(value="id DESC")
private List<UploadField> uploads;
表结构中含有appointment的id.
@ManyToOne(cascade=CascadeType.REFRESH,optional=true)
@JoinColumn(name="APPOINTMENT_ID")
private Appointment appointment;
相关推荐
本代码为hibernate的manytoone的代码 博文链接:https://shaqiang32.iteye.com/blog/201307
* 从表:@OneToOne(mappedBy = "主表类中的从表属性")//例主表User中有一个从表属性是Heart类型的heart,这里就填heart * public 主表类 get主表类(){return 主表对象} * 注意:@JoinColumn是可选的。默认值是从表...
详解Hibernate cascade级联属性的CascadeType的用法 cascade(级联) ...cascade表示级联操作,在hibernate配置注解@OneToOne,@OneToMany,@ManyToMany,@ManyToOne中的属性。 例如: @ManyToOne(c
第一阶段的工程 博文链接:https://selvemen.iteye.com/blog/458615
@ManyToOne批注有一个名为targetEntity的参数,该参数定义了目标实体名,通常不需要定义该参数,因为在大部分情况下默认值(表示关联关系的属性类型)就可以很好的满足需求了。不过下面这种情况下这个参数就显得有意义...
SpringBoot-SpringData-ManyToOne,博文地址:http://blog.csdn.net/ABAP_Brave/article/details/52850062
o @ManyToOne o @MapKey o @MappedSuperclass • N o @NamedNativeQueries o @NamedNativeQuery o @NamedQueries o @NamedQuery • O o @OneToMany o @OneToOne o @OrderBy • P o @PersistenceContext o @...
0.0.1-SNAPSHOT.jar运行前端: ng serve -o文件Github项目-https: 主要困难业务/域规则,已多次更改在后端建立关系@OneToMany-@ManyToOne 后端全球CORS 后端验证组织Dockerfile和docker-compose.yml
主要介绍了MySQL使用外键实现级联删除与更新的方法,详细分析了mysql数据库与表的创建、数据插入、查询以及外链的使用与级联操作相关技巧,需要的朋友可以参考下
@ManyToOne-->表示多对一关系 双向 @OneToMany(mappeBy="") 关系交给对方维护 3多对多 @ManyToMany-->代表多对多 @ManyToMany(mappeBy="")mappeBy-->通过此属性把关系交给对方维 注意:一般出现多对多的情况时...
@ManyToOne(cascade = {CascadeType.ALL}, fetch = FetchType.LAZY) @JoinColumn(name = "personid", unique = false, nullable = true, insertable = true, updatable = true) public Person getPerson() { ...
@ManyToOne public Presenter presenter; } 映射继承关系 EJB支持3种类型的继承。 • Table per Class Strategy: the <union-class> element in Hibernate 每个类一张表 • Single Table per Class Hierarchy ...
@OneToMany和@ManyToOne的示例(处理无限递归,请参见[1.1]) 使用jUnit进行基本测试的示例 1.1。 JsonManagedReference和JsonBackReference 从Jackson 1.6开始,您可以使用两个注释来解决无限递归问题,而不必在...
弹簧过滤器您需要一种无需任何努力即可动态过滤实体的方法吗? 只需将我添加到您的pom.xml 。 您的API将获得功能全面的搜索功能。 您不使用API吗?... @ManyToOne Brand brand; @OneToMany Lis
@OneToMany(mappedBy 相当于 inverse ) @ManyToOne 结合 @JoinColumn 添加一列外键 @ManyToMany 一方写 mappedBy 放弃外键维护、另一方 @JoinTable 维护中间表 收派标准修添加能实现 html 请求 后台...
例如@ManyToOne、@OneToMany 和@OneToOne。 实现了这些注释的单向和双向变体。 嵌入式数据库服务器是使用 Apache Derby 实现的。 单元测试允许验证关联集合的获取以及对关联集合的插入和更新的级联 配置是基于 ...
zastosowanie relacji(@ManyToOne) 用户界面,用户界面(przyciski,listy rozwijane)z funkcjamiposzczególnychelementówdziałającymibezpośredniona dany obiekt w tabeli tabeleładowanez listy oraz...
迁移,typeorm,实体和postgres数据库,带有tsyringe的自动依赖项注入,OneToMany更改,ManyToMany,ManyToOne,错误处理和单元测试。 在此挑战中,在NodeJs中创建了一个带有Typescript的应用程序,该应用程序应...