有两种方式实现一对多的单向关联。一种是在只使用@OneToMany来标识,这种方式是通过一张第三方表来保存关系。还有一种是使用@OneToMany和@JoinColumn来标注,这种方式是在多的一方(Book)的表中增加一个外键列来保存关系。
第一种方式,通过一张第三方表来实现一对多的单向关联:
Authorjava如下,需要注意private Set<Book> books = new HashSet<Book>()的注解。只是使用了@OneToMany。
1 package comcndatacomjpaentity; 2 3 import javautilHashSet; 4 import javautilSet; 5 6 import javaxpersistenceCascadeType; 7 import javaxpersistenceColumn; 8 import javaxpersistenceEntity; 9 import javaxpersistenceFetchType;10 import javaxpersistenceGeneratedValue;11 import javaxpersistenceId;12 import javaxpersistenceOneToMany;13 import javaxpersistenceTable;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=CascadeTypeALL,fetch=FetchTypeLAZY)//级联保存、更新、删除、刷新;延迟加载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 thisid = id;46 }47 48 49 public String getName() {50 return name;51 }52 53 54 public void setName(String name) {55 thisname = name;56 }57 58 59 public Set<Book> getBooks() {60 return books;61 }62 63 64 public void setBooks(Set<Book> books) {65 thisbooks = books;66 }67 68 69 70 71 }
Bookjava如下,因为是单向的关联,所以这个实体不需要加任何的关联标识。
1 package comcndatacomjpaentity; 2 3 import javaxpersistenceColumn; 4 import javaxpersistenceEntity; 5 import javaxpersistenceGeneratedValue; 6 import javaxpersistenceId; 7 import javaxpersistenceTable; 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 thisid = id;32 }33 34 public String getName() {35 return name;36 }37 38 public void setName(String name) {39 thisname = 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)的表中增加一个外键列实现一对多的单向关联。
Authorjava如下,需要注意private Set<Book> books = new HashSet<Book>()的注解。同时使用了@OneToMany和@JoinColumn。
1 package comcndatacomjpaentity; 2 3 import javautilHashSet; 4 import javautilSet; 5 6 import javaxpersistenceCascadeType; 7 import javaxpersistenceColumn; 8 import javaxpersistenceEntity; 9 import javaxpersistenceFetchType;10 import javaxpersistenceGeneratedValue;11 import javaxpersistenceId;12 import javaxpersistenceJoinColumn;13 import javaxpersistenceOneToMany;14 import javaxpersistenceTable;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=CascadeTypeALL,fetch=FetchTypeLAZY)//级联保存、更新、删除、刷新;延迟加载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 thisid = id;48 }49 50 51 public String getName() {52 return name;53 }54 55 56 public void setName(String name) {57 thisname = name;58 }59 60 61 public Set<Book> getBooks() {62 return books;63 }64 65 66 public void setBooks(Set<Book> books) {67 thisbooks = books;68 }69 70 71 72 73 }
Bookjava不变。
在数据库中只生成了两张表:author和book。
再看book表的结构,会多了一列author_id。
spring data jpa 默认预先生成了一些基本的CURD的方法,例如:增、删、改等等
1 继承JpaRepository
public interface UserRepository extends JpaRepository<User, Long> {
}
2 使用默认方法
@Test
public void testBaseQuery() throws Exception {
User user=new User();
userRepositoryfindAll();
userRepositoryfindOne(1l);
userRepositorysave(user);
userRepositorydelete(user);
userRepositorycount();
userRepositoryexists(1l);
//
}
以上就是关于jpa一对多的映射(单向),怎么更新全部的内容,包括:jpa一对多的映射(单向),怎么更新、spring boot 使用jpa连接数据库 dao层怎么写、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)