现在才开始学习hibernate,知道关联大概有3种:多对一/一对多, 一对一,多对多
现在有些简单的疑问需要请教:1.单双向关联是什么?每种关联都可以分为单向和双向吗?
2.用hibernate设定关联了,假如不在数据库本身设定关联,是不是也可以(不影响增删改级联)?
3.主控方又是什么?每种关联都可以设定主控方吗?
现在有些简单的疑问需要请教:1.单双向关联是什么?每种关联都可以分为单向和双向吗?
2.用hibernate设定关联了,假如不在数据库本身设定关联,是不是也可以(不影响增删改级联)?
3.主控方又是什么?每种关联都可以设定主控方吗?
解决方案 »
- 在交易系统设计中,一张表插入删除,和两张表分别插入删除,效率差别大吗,求指导
- ■■跪求■■JAVA实现 CRC16■。已经有C 和 C#版本了。仅做成JAVA版本即可
- 用jasperreports做的excel线很乱
- TimeoutException: Timed out(1000) waiting for operation
- Runtime.exec调用外部程序,如何做到不与其产生关联?
- 精通EJB3.0的源代码,为什么老报错呢?
- Myeclipse中ssh问题求救????????
- 急急急struts2开发 提交报404错误!!!!!!!!!!!!!!!!!!!!!!
- 用logic:iterate标签和beanwrite标签输出集合出错 急急急
- tomcat和数据库连接池
- java表达式语言实现这个功能
- 初始化网卡信息失败
class A {
private int id;
private Set<B> bs;
}class B {
private int id;
private A a;
}上面的例子是一对多双向,这种时候,你只要加载了A 的实例 a ,则可以很简单地用a.getBs()来取得关联的 B 的集合;
反过来,你加载了B 的实例 b,也可以简单地用 b.getA() 来取得其关联的 A 实例。
//一对多,单向
class A {
private int id;
//private Set<B> bs;
}class B {
private int id;
private A a;
}上面这个单向的例子,很简单地,你加载了B,很容易就能得到与其关联的A;反过来你加载了A,却不能简单地获得关联的所有的B实体(这个时候只能用HQL查询了,超出此帖范围)。
问题2:你在Hibernate里面设置了关联,并且也使用了Hibernate 的SchemaExport来生成数据库结构,那么一般来说数据库层面上的关联也都已经做好了。如果是应用在现存数据库上,那么关联关系就是纯粹由Hibernate来维护了,你所提到的级联删除问题,只要是你在hibernate下用映射实体进行的操作,那么这些你都不需要担心级联问题,Hibernate会帮你处理。即使数据库层面上没有相关的关联constraint,因为hibernate的级联操作最终是落实到SQL语句上的,从来也都没用到数据库native的级联功能,所以并无影响。
问题3:是的,每一种映射都可以指定主控方。所谓“主控方”其实就是告诉Hibernate,我这个CRUD操作到底应该由该关联的哪一头的实体来最终发出SQL语句。一般来说只能在“多”的一头指定主控方,inverse=true 就是指定 “一” 的那一方来发出SQL,inverse=false 则“有可能”是自己这一方(“多”)生成SQL。这里面一时半会说不完,比较简便的使用规则是,尽量指定“一”的一方作为主控,这样SQL的效率会比较高。
2.这样的是可以的,数据库中没有关联,没有外键,但是可以在hibernate中可以通过配置来管理;
3.主控方是用于配有级联关系情况才有效的,主控方是指主动维护双方关系的一方。是通过配置来实现的。