原文: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. ubuntu 一些命令

    打开终端 ctrl+alt+t 关闭中端 ctrl+shift+q 打开ppt openoffice.org -g xx.ppt &

  2. 继续OI

    NOIP2016于2016.11.20日12:00正式结束. 我作为oi的生涯 或许会结束? 或者继续? 然而前途依然迷茫,我是否应该继?或是放弃? 距离省选还有3~4个月,我该何去何从? 虽然已经经 ...

  3. 链表c++实现一

    #include <iostream>using namespace std; typedef char nodeEntry; struct Node{ //数据成员 nodeEntry ...

  4. centos安装sublime

    在官网下载,tarball    下载链接        http://www.sublimetext.com/3 提示信息:  Ubuntu 64 bit - also available as a ...

  5. polyfill之javascript函数的兼容写法——Array篇

    1. Array.isArray(obj) if (!Array.isArray) { Array.isArray = function(arg) { return Object.prototype. ...

  6. Zend Studio 中安装emmet插件的方法

    本人的Zend Studio版本是Zend Studio 10.0.0. 1. 打开Zend Studio,点击 Help --> Install New Software,如下图: 2.  在 ...

  7. 【转】excel 末尾是0 恢复数据方法

    今天从数据库里面查了点数据,用plsql导出为csv数据后用excel打开后就出问题了,显示的问题,excel中会遇到一列中因为数字太长,结果变成了用科学计数法来表示,而这种损失不可逆的,及时改变其格 ...

  8. spring mvc 4识别浏览器(移动端) spring-mobile-device

    官方文档: http://projects.spring.io/spring-mobile/ 通过mvc.xml配置示例: http://blog.csdn.net/wuyt2008/article/ ...

  9. VPython 三维显示 —— hello word

    使用VPython,python(x,y)中已安装VPython模块 from visual import * cylinder(pos=(0,1,0), axis=(0,1,0), radius=0 ...

  10. win 安装mysql

    windows上安装sql最容易出现 1067错误,网上查了很多,大部分都是误导.现在将验证过的步骤总结如下: 1.下载mysql,我用的是mysql-5.6.24-win32 下载后解压,进入到bi ...