原文:http://blog.sina.com.cn/s/blog_6fef491d0100obdd.html

终于要说ManyToMany了

场景:Product和Customer。

先看TestProduct.java

 package net.paoding.forum.domain;   

 import java.util.ArrayList;
import java.util.List; import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.ManyToMany; @Entity
public class TestProduct
{
private String id;
private String name;
private float price;
private List<TestCustomer> customers = new ArrayList<TestCustomer>(); @Id
public String getId()
{
return id;
} public void setId(String id)
{
this.id = id;
} public String getName()
{
return name;
} public void setName(String name)
{
this.name = name;
} public float getPrice()
{
return price;
} public void setPrice(float price)
{
this.price = price;
} @ManyToMany
public List<TestCustomer> getCustomers()
{
return customers;
} public void setCustomers(List<TestCustomer> customers)
{
this.customers = customers;
} }

注意这里的ManyToMany什么都没有写。

再看TestCustomer.java

 package net.paoding.forum.domain;   

 import java.util.ArrayList;
import java.util.List; import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.ManyToMany; @Entity
public class TestCustomer
{
private String id;
private String tel;
private List<TestProduct> products = new ArrayList<TestProduct>(); @Id
public String getId()
{
return id;
} public void setId(String id)
{
this.id = id;
} public String getTel()
{
return tel;
} public void setTel(String tel)
{
this.tel = tel;
} @ManyToMany(mappedBy = "customers")
public List<TestProduct> getProducts()
{
return products;
} public void setProducts(List<TestProduct> products)
{
this.products = products;
}
}

这里的ManyToMany我写了mappedBy这个attribute。

然后看hib产生的sql:

  drop table test_customer cascade constraints;
drop table test_product cascade constraints;
drop table test_product_customers cascade constraints; create table test_customer (
id varchar2(255 char) not null,
tel varchar2(255 char),
primary key (id)
); create table test_product (
id varchar2(255 char) not null,
price float not null,
name varchar2(255 char),
primary key (id)
); create table test_product_customers (
products_id varchar2(255 char) not null,
customers_id varchar2(255 char) not null
);

ok! 非常好。hib终于在ManyToMany上没有犯白痴了。

上面强调了mappedBy这个属性。其实,在annotation 系列中。都有提到mappedBy这个东西。只是,我没有说到底是什么意思。其实很简单:这个东西就相当于xml配置中的inverse。写了mappedBy就代表这个方法的返回值是被维护方

转@ManyToMany- annotation关系映射篇(下)的更多相关文章

  1. 转@OneToMany或@ManyToOne的用法-annotation关系映射篇(上)

    原文:http://blog.sina.com.cn/s/blog_6fef491d0100obdm.html 例如我们用一个例子来开启JPA的一对多和多对一的学习. 比如你去当当网上买书籍,当当网就 ...

  2. Hibernate -- 注解(Annotation)关系映射

    转自:http://www.cnblogs.com/tyler2000/archive/2011/01/20/1940354.html 1. Hibernate Annotation关系映射有下面几种 ...

  3. Hibernate注解关系映射

    Hibernate Annotation关系映射的几种类型映射用法及使用方法(说明:以前实例的实体是user和role,主键分别是userid和roleid)   1)一对一外键关联映射(单向) @O ...

  4. Hibernate基础学习(五)—对象-关系映射(下)

    一.单向n-1 单向n-1关联只需从n的一端可以访问1的一端. 域模型: 从Order到Customer的多对一单向关联.Order类中定义一个Customer属性,而在Customer类不用存放Or ...

  5. JPA实体关系映射:@ManyToMany多对多关系、@OneToMany@ManyToOne一对多多对一关系和@OneToOne的深度实例解析

    JPA实体关系映射:@ManyToMany多对多关系.@OneToMany@ManyToOne一对多多对一关系和@OneToOne的深度实例解析 今天程序中遇到的错误一 org.hibernate.A ...

  6. 你所不知道的库存超限做法 服务器一般达到多少qps比较好[转] JAVA格物致知基础篇:你所不知道的返回码 深入了解EntityFramework Core 2.1延迟加载(Lazy Loading) EntityFramework 6.x和EntityFramework Core关系映射中导航属性必须是public? 藏在正则表达式里的陷阱 两道面试题,带你解析Java类加载机制

    你所不知道的库存超限做法 在互联网企业中,限购的做法,多种多样,有的别出心裁,有的因循守旧,但是种种做法皆想达到的目的,无外乎几种,商品卖的完,系统抗的住,库存不超限.虽然短短数语,却有着说不完,道不 ...

  7. v78.01 鸿蒙内核源码分析(消息映射篇) | 剖析LiteIpc(下)进程通讯机制 | 百篇博客分析OpenHarmony源码

    百篇博客分析|本篇为:(消息映射篇) | 剖析LiteIpc(下)进程通讯机制 进程通讯相关篇为: v26.08 鸿蒙内核源码分析(自旋锁) | 当立贞节牌坊的好同志 v27.05 鸿蒙内核源码分析( ...

  8. python第三篇:python、flask关系映射

    python中关系映射主要包括三种:一对多关系映射.一对一关系映射.多对多关系映射. 一对多关系映射 一方:Student(学生) 添加关联属性和反向引用 多方:Article(文章) 添加外键关联 ...

  9. 解析大型.NET ERP系统数据访问 对象关系映射框架LLBL Gen Pro

    LLBL Gen Pro是一个为.NET开发人员设计的的对象关系映射(ORM)框架,与NHibernate,Entity Framework等框架一样,通过实体与数据表的映射,实现关系数据库持久化. ...

随机推荐

  1. C/C++中const的用法 分类: C/C++ 2015-07-05 00:43 85人阅读 评论(0) 收藏

    const是C语言的关键字,经C++进行扩充,变得功能强大,用法复杂.const用于定义一个常变量(只读变量),当const与指针,引用,函数等结合起来使用时,情况会变得复杂的多.下面将从五个方面总结 ...

  2. NTP时间同步服务器设置

    一.Window Server设置 [服务器端设置]1) 修改注册表以下键值:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\ ...

  3. Bash命令积累

    复制本目录下除掉所有的.png文件外的所有其他文件到某个目录下: mv -f !(*.png) ./src/ 除掉所有的.png文件外其余的文件,全部删掉 rm -f !(*.png) 本目录下,不显 ...

  4. windows开机记录查询

    http://jingyan.baidu.com/article/3d69c5516b9a9ef0cf02d7f3.html

  5. Tuxedo 超时时间控制(转贴)

    以下是转贴: TUXEDO超时控制全功略 摘要: 本<功略>集中了TUXEDO应用中,可能涉及到的所有时间参数,并分别对其进行详细描述,不但对其出处.取值等基本属性进行查证,而且,通过分析 ...

  6. 关于FPGA学习路线

    1.参考FPGA厂商的参考资料,将某系列FPGA所有芯片资料下载下来,有针对性的做参考. 2.参考FPGA厂商开发板以及相应的参考设计,在开发板里有众多的外围接口电路,基本涵盖了常用的应用场合.同时也 ...

  7. [综]隐马尔可夫模型Hidden Markov Model (HMM)

    http://www.zhihu.com/question/20962240 Yang Eninala杜克大学 生物化学博士 线性代数 收录于 编辑推荐 •2216 人赞同 ×××××11月22日已更 ...

  8. AWS CloudFormation Template

    { "AWSTemplateFormatVersion" : "2010-09-09", "Parameters" : { "Ba ...

  9. Angular.JS学习笔记——1

    内容来自:http://www.runoob.com/angularjs/angularjs-intro.html AngularJS 是一个 JavaScript 框架.它是一个以 JavaScri ...

  10. ext4 disable journal

    ext4 disable journal At one high loaded web project I needed a very fast file system. I decided to u ...