在Oracle数据库中如何把两张表关联起来,多对一或者一对一一对多。请写明语句 谢谢!!!

在Oracle数据库中如何把两张表关联起来,多对一或者一对一一对多。请写明语句 谢谢!!!,第1张

有两种办法:

第一种方法是通过外键:

假设有两张表,

A表(AId,AName) B(BId,BName)表 ,要想把这两者关联起来的话。可以通过外键来关联,在B表或者A表中添加一个外键。这里就以B表把B(BId,AId(外键),BName),这样通过外键两张表就可以联系起来了,例如我们在查询的时候通过AId就可以关联查询两张表的数据了。

第二种方法就是增加一张表:

还是拿A表(AId,AName) B(BId,BName)表来举例把,

我们可以增加个C表来联系AB表之间的关系

C表中只要放AB表的主键就行了

C(AId,BId),这样我们就可以通过C表来关联AB表了。

呵呵

首先有两张关联的表,类别表Category和展品表Product,一个类别对应多种展品,

category字段有 id(主键),name

product字段有 id(主键) name,price,c_id(这个就是外键)

在Category类中

private Integer id

private String name

private Set<Product>products=new HashSet()//注意这里不要只写private Set<Product>products,不然后面会出现问题的,因为在取集合的时候回返回null,这样是不行的

定义好属性后再分别生成对于的get/set方法

在Product类中

private Integer id

private String name

private Double price

private Category category

再分别生成对对应的get/set方法

在设置相应的.hbm.xml文件

在Category.hbm.xml文件中

<hibernate-mapping>

<class name="com.cheng.entry.Category" table="category">

<id name="id" type="java.lang.Integer">

<column name="id"></column>

<generator class="native"></generator>

</id>

<property name="name" type="java.lang.String">

<column name="name" length="255"></column>

</property>

<set name="products(这个表示的就是Category类中的Set集合)">

<key column="c_id(这个说明的就是在表product中的外键)"></key>

<one-to-many class="com.cheng.entry.Product(说明所在的类)"/>

</set>

</class>

</hibernate-mapping>

在Product.hbm.xml中

<hibernate-mapping>

<class name="com.cheng.entry.Product" table="product">

<id name="id" type="java.lang.Integer">

<column name="id"></column>

<generator class="native"></generator>

</id>

<property name="name" type="java.lang.String">

<column name="name" length="200"></column>

</property>

<property name="price" type="java.lang.Double">

<column name="price" ></column>

</property>

<many-to-one name="category(这个就是在Product类中定义的)" class="com.cheng.entry.Category">

<column name="c_id(对应product表中的外键)"></column>

</many-to-one>

</class>

</hibernate-mapping>

这样就完成了

在这里还可以在

一方中设置 cascade属性

<set name="products(这个表示的就是Category类中的Set集合)" cascade="save-update">

<key column="p_id(这个说明的就是在表product中的外键)"></key>

<one-to-many class="com.cheng.entry.Product(说明所在的类)"/>

</set>

表示的级联,意思就是说主动方执行 *** 作时,被关联的对象(被动方)是否要同步执行同一 *** 作(在一对多的关联中,一般都是一方是主动方)

cascade有四个值:

none:什么也不做

save-update:一方进行添加和更新时(这个经常用)

all:所以 *** 作

delete:

delete-orphan:

在一方中可以设置反转inverse="true"

控制反转,在一对多中让多方变为主动对象


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11854605.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-19
下一篇 2023-05-19

发表评论

登录后才能评论

评论列表(0条)

保存