前言
近期在開發新的專案會用到JPA,
之前都傾向用JDBC,碰到JPA都是一些簡單的CRUD,
從零開始開發用JPA算是第一次,記錄一下使用JPA上遇到的問題。
因為屬於小型系統,
所以目前只有實作user及role相關的table。
開發前會先規劃好建立table的SQL
以下作為文章示範用的ERD:

SQL語法範例-> 【sql】create table user,role,user_role
第一步:建立Entity
JPA 首先會建立Entity,這邊就先遇到一個坑,
如果有使用Lombok的@Data會一直跳出stackoverflow的錯誤,
除非使用@Getter + @Setter。
或是另一種方式(待補..)
會造成這個原因是(太長待補..)
Entity - User (父表)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| @Getter @Setter @Entity @Table(name = "user", schema = "test") public class User { @Id @Column(name = "user_id") private Integer userId;
@Column(name = "password") private String password;
@Column(name = "username") private String username;
@ManyToMany(cascade = CascadeType.ALL) // 多對多關係 中介表 @JoinTable(name = "user_role", // user FK joinColumns = @JoinColumn(name = "user_id"), // role FK inverseJoinColumns = @JoinColumn(name = "role_id")) // 建議ManyToMany用Set會依照PK遞增排序,用ArrayList會允許重複因此不建議。 private Set<Role> roles = new HashSet<>();
}
|
Entity - Role (子表)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| @Getter @Setter @Entity @Table(name = "role", schema = "test") public class Roles { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) // 自動增加 @Column(name = "role_id") private Integer roleId; @Column(name = "role_name") private String role;
@ManyToMany(mappedBy = "roles") private Set<User> users = new HashSet<>(); }
|
紀錄@ManyToMany參數設定
…待補