jpa一对多的映射(单向),怎么更新
Spring 2.5.6新特性之packagesToScan 如果你使用早前版本的Spring,又恰好采用了Annotation注解方式(而非传统XML方式)配置Hibernate对象关系映射,那么在通过org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean配置se...
多对多关系:(2个类可以互相包含多个对方,多对多有个中间表)
中间表无实体类,只在数据库中存在
@ManyToMany
@JoinTable(name="中间表名称",
joinColumns=@joinColumn(name="本类的外键",
referencedColumnName="本类与外键对应的主键"),
inversejoinColumns=@JoinColumn(name="对方类的外键",
referencedColunName="对方类与外键对应的主键")
)
有两种方式实现一对多的单向关联。一种是在只使用@OneToMany来标识,这种方式是通过一张第三方表来保存关系。还有一种是使用@OneToMany和@JoinColumn来标注,这种方式是在多的一方(Book)的表中增加一个外键列来保存关系。
第一种方式,通过一张第三方表来实现一对多的单向关联:
Author.java如下,需要注意private Set<Book> books = new HashSet<Book>()的注解。只是使用了@OneToMany。
1 package com.cndatacom.jpa.entity; 2 3 import java.util.HashSet; 4 import java.util.Set; 5 6 import javax.persistence.CascadeType; 7 import javax.persistence.Column; 8 import javax.persistence.Entity; 9 import javax.persistence.FetchType;10 import javax.persistence.GeneratedValue;11 import javax.persistence.Id;12 import javax.persistence.OneToMany;13 import javax.persistence.Table;14 15 16 /**17 * 作者18 * @author Luxh19 */20 21 @Entity22 @Table(name="author")23 public class Author {24 25 @Id26 @GeneratedValue27 private Long id;28 29 /**作者的名字*/30 @Column(length=32)31 private String name;32 33 /**作者写的书*/34 @OneToMany(cascade=CascadeType.ALL,fetch=FetchType.LAZY)//级联保存、更新、删除、刷新;延迟加载35 private Set<Book> books = new HashSet<Book>();36 37 38 39 public Long getId() {40 return id;41 }42 43 44 public void setId(Long id) {45 this.id = id;46 }47 48 49 public String getName() {50 return name;51 }52 53 54 public void setName(String name) {55 this.name = name;56 }57 58 59 public Set<Book> getBooks() {60 return books;61 }62 63 64 public void setBooks(Set<Book> books) {65 this.books = books;66 }67 68 69 70 71 }
Book.java如下,因为是单向的关联,所以这个实体不需要加任何的关联标识。
1 package com.cndatacom.jpa.entity; 2 3 import javax.persistence.Column; 4 import javax.persistence.Entity; 5 import javax.persistence.GeneratedValue; 6 import javax.persistence.Id; 7 import javax.persistence.Table; 8 9 /**10 * 书11 * @author Luxh12 */13 14 @Entity15 @Table(name="book")16 public class Book {17 18 @Id19 @GeneratedValue20 private Long id;21 22 /**书名*/23 @Column(length=32)24 private String name;25 26 public Long getId() {27 return id;28 }29 30 public void setId(Long id) {31 this.id = id;32 }33 34 public String getName() {35 return name;36 }37 38 public void setName(String name) {39 this.name = name;40 }41 42 43 }
只在Author实体中对private Set<Book> books = new HashSet<Book>()加上标注@OneToMany实现单向关联。这样就通过一个关联表来实现这种关联。生成数据库表如下,会以Author的表名和下划线和Book的表名生成一张表author_book来保存Author和Book的一对多单向映射。
在author_book表中,存的是Auhtor的id和Book的id:
第二种方式,通过在多方(Book)的表中增加一个外键列实现一对多的单向关联。
Author.java如下,需要注意private Set<Book> books = new HashSet<Book>()的注解。同时使用了@OneToMany和@JoinColumn。
1 package com.cndatacom.jpa.entity; 2 3 import java.util.HashSet; 4 import java.util.Set; 5 6 import javax.persistence.CascadeType; 7 import javax.persistence.Column; 8 import javax.persistence.Entity; 9 import javax.persistence.FetchType;10 import javax.persistence.GeneratedValue;11 import javax.persistence.Id;12 import javax.persistence.JoinColumn;13 import javax.persistence.OneToMany;14 import javax.persistence.Table;15 16 17 /**18 * 作者19 * @author Luxh20 */21 22 @Entity23 @Table(name="author")24 public class Author {25 26 @Id27 @GeneratedValue28 private Long id;29 30 /**作者的名字*/31 @Column(length=32)32 private String name;33 34 /**作者写的书*/35 @OneToMany(cascade=CascadeType.ALL,fetch=FetchType.LAZY)//级联保存、更新、删除、刷新;延迟加载36 @JoinColumn(name="author_id")//在book表增加一个外键列来实现一对多的单向关联37 private Set<Book> books = new HashSet<Book>();38 39 40 41 public Long getId() {42 return id;43 }44 45 46 public void setId(Long id) {47 this.id = id;48 }49 50 51 public String getName() {52 return name;53 }54 55 56 public void setName(String name) {57 this.name = name;58 }59 60 61 public Set<Book> getBooks() {62 return books;63 }64 65 66 public void setBooks(Set<Book> books) {67 this.books = books;68 }69 70 71 72 73 }
Book.java不变。
在数据库中只生成了两张表:author和book。
再看book表的结构,会多了一列author_id。
高一数学基础知识清单
(1)映射:设A、B是两个集合,如果按照某种映射法则f,对于集合A中的任一个元素,在集合B中都有唯一的元素和它对应,则这样的对应(包括集合A、B以及A到B的对应法则f)叫做集合A到集合B的映射,记作f:A→B。注意点:(1)对映射定义的理解。(2)判断一个对应是映射的方法。一对多不是映射,多对一是映射2、函数...
关于映射中的对应法则是什么?
(存在多对一,一对一),相当于直线,二次函数 如函数y=x+1 一个x对应一个y(一对一是映射)函数y=x^2 两个x就可对应同一个y,如x=-1和1都对应y=1(多对一是映射)而直线x=1就不是函数,因为它是一个X对应多个Y 同时它也不符和映射的定义(一对多不是映射)。
映射一对多还是多对一
映射,或者射影,在数学及相关的领域还用于定义函数。函数是从非空数集到非空数集的映射,而且只能是一对一映射或多对一映射。映射在不同的领域有很多的名称,它们的本质是相同的。如函数,算子等等。这里要说明,函数是两个数集之间的映射,其他的映射并非函数。一一映射(双射)是映射中特殊的一种,即...
用户使用的数据是通过映射完成的,对不对
除了 Windows 和 UNIX 用户和组帐户之间的一对一映射之外,用户名映射还允许一对多的映射。这样可以将多个 Windows 帐户与一个 UNIX 帐户关联。例如,如果不需要为各个用户维护独立的 UNIX 帐户,更希望使用较少的帐户提供不同的访问权限级别,则可以使用此方法。可以使用简单映射,用于映射名称相同的 ...
函数里面什么叫做映射? 什么是对应法则? 求一个简单易懂的答案_百度知...
映射:设A,B是两个集合,如果按照某种对应法则f,对于集合 A中的任何一个元素,在集合B中都有唯一的元素和它对应,这样的对应(包括集合A、B以及A到B的对应法则f)叫 做集合A到集合B的映射。一对一,多对一是映射。但一对多显然不是映射。
如何配置单向多对一关联关系?
hihernate一对多关联映射 例如(单向Classes--->Student)一对多关联映射利用了多对一关联映射原理 多对一关联映射:在多的一端加入一个外键指向一的一端,它维护的关系是多指向一 一对多关联映射:在多的一端加入一个外键指向一的一端,它维护的关系是一指向多 也就是说一对多和多对一的映射策略是一...
下面的对应是否为从A到B的映射
2。是映射 1。不是,因为每个x,有两个y: √x 和-√x 与之对应 y²=x x²=y 都是x,y应满足的条件,等式满足即可,无所谓左右
映射的概念是什么?
映射是数学中描述了两个集合元素之间一种特殊的对应关系的。映射在不同的领域有很多的名称,它们的本质是相同的。如函数,算子等等。这里要说明,函数是两个数集之间的映射,其他的映射并非函数。一一映射(双射)是映射中特殊的一种,即两集合元素间的唯一对应,通俗来讲就是一个对一个。(由定义可知,...
MyEclipse Persistence Tools 怎么生成pojo类
Generate support for UnlistedTable(fk)->ListedTable:确认是否生成当前这个实体类的一对多关联映射。注意!如果数据库表之间没有添加外键约束,映射不会生成。全部设置完成后,点击“Finish”按钮。需要的实体类,实体类映射文件,以及Hibernate配置文件中的映射添加就全部自动完成了。
映射单射满射的区别
也就是Y中所有元素在X中都能找到原像,至于找到的只有一个原像,那就是双射。但有的可以找到一个以上的那就不是双射,即双射就是既是单射又是满射。总之只能一对一或多对一,但不能一对多,并且在映射f:X→Y中X的每个元素都参与,Y中可能都参与,那就满了,就是满射,反之就不是满射。
狂径气血: Spring 2.5.6新特性之packagesToScan 如果你使用早前版本的Spring,又恰好采用了Annotation注解方式(而非传统XML方式)配置Hibernate对象关系映射,那么在通过org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean配置se...
安陆市17058193784: hibernate一对一关系有几种映射方式 - ?
狂径气血: Hibernate的关联关系映射大概有这么几种: 1、单向N-1 2、单向1-1 3、单向1-N 4、单向N-N 5、双向1-N 6、双向N-N 7、双向1-1 下面就对这七种关联关系映射进行一个简单的总结: 一、单向的多对一 看两个POJO public class Person{ private ...
安陆市17058193784: jpa 多对多表映射应该怎么写 - ?
狂径气血: 多对多关系:(2个类可以互相包含多个对方,多对多有个中间表) 中间表无实体类,只在数据库中存在 @ManyToMany @JoinTable(name="中间表名称", joinColumns=@joinColumn(name="本类的外键", referencedColumnName="本类与外键对应的主键"), inversejoinColumns=@JoinColumn(name="对方类的外键", referencedColunName="对方类与外键对应的主键") )
安陆市17058193784: 如何使用JPA注解 Hibernate 多对一单向外键关联HQL查询 - ?
狂径气血: java.lang.IllegalStateException: No data type for node: org.hibernate.hql.ast.tree.IdentNode+-[IDENT] IdentNode: 'name' {originalText=name} 根据这个异常判断呀
安陆市17058193784: 如何配置单向多对一关联关系? - ?
狂径气血: hihernate一对多关联映射 例如(单向Classes----->Student) 一对多关联映射利用了多对一关联映射原理 多对一关联映射:在多的一端加入一个外键指向一的一端,它维护的关系是多指向一 一对多关联映射:在多的一端加入一个外键指向一的一...
安陆市17058193784: jpa 的映射不能一个两个属性同时对应一个字段吗 - ?
狂径气血: @Transient ....两位 看清楚了再说好么 楼主的问题是使用JPA注解如何能使一个Entity中的属性作为普通属性而不成为数据表中的某个字段... @Transient表示该属性并非一个到数据库表的字段的映射,
安陆市17058193784: 什么是jpa实体对象双向关联,什么是单向关联,它们之间的区别是? - ?
狂径气血: 1.jpa是持久层开发的一种标注,一个规范;2.双向关联简单说就是你中有我,我中有你,举个例子:课程和学生这两个对象,课程可以被多个学生选择,学生可以选多个课程,则课程对象中会包含一个学生对象集合的属性,同样的学生对象中也要有个课程对象集合的属性.
安陆市17058193784: Hibernate的关系映射如一对多,为什么要做成双向然后加inverse="true"? - ?
狂径气血: 在Hibernate中,术语inverse是反转的意思,在关联关系中,inverse="false"为主控方,由主控方负责维护对象的关联关系.所以上面的映射文件改动之后,address为主控方,people为被控方,但是测试代码只进行了一个保存操作session.save(people),这是针对people的,因此无法正确级联保存address.而原来的映射文件中(虽然没有明确指明,Hibernate默认inverse="false"),people为主控方,因此保存people时它会保证关联的address的正确保存.
安陆市17058193784: Hibernate java配置问题:单向多对一,多方的外键列名,和一方的主键列名不同, - ?
狂径气血: 1.Hibernate是一种对象关系型映射的框架,把对象作为属性赋值给另外一个对象,实际上在底层完成的操作就是将其id赋值给另外那个对象表的外键.而在操作上,直接操作对象会更直观,所以你可以看到在Hibernate中使用的不是一般的sql,...
安陆市17058193784: hibernate一对多映射时,单向关联和双向关联有什么区别,哪个好? - ?
狂径气血:单向关联就是只使用单方面来维护关系,双向关联就是双方面都要维护关系, 要决定是使用单向的关联还是双向的关联,要取决你的业务要求,如果单向联系能够达到你所需要的业务要求,那肯定就是选择单向的关联(我的建议也是使用单向的关联,使用双向的关联,关系复杂了,容易出现问题).关联的时候还涉及的就是控制权的问题,在最好把控制权给与many的那方(控制权就是谁来维护他们之间的关系),