jpa一对多的映射(单向),怎么更新

作者&投稿:鄢齐 (若有异议请与网页底部的电邮联系)
spring data 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中可能都参与,那就满了,就是满射,反之就不是满射。

安陆市17058193784: spring data jpa一对多的映射,怎么更新 -
狂径气血: 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的那方(控制权就是谁来维护他们之间的关系),

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网