authority 角色
permission 权限
authority_permission 中间表
现在要对中间表进行操作,但是中间表的两个字段分别是两个主表的外键,而不是主键,所以要给这张中间表创建一个联合主键,然后就可以对中间表进行操作了,
详见
AuthorityPermission.java
AuthorityPermissionId.java
@Entity @Table(name = "authority", schema = "msa") @Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) @Data public class Authority { @Size(min = 1, max = 20) @Id @Column(length = 20) private String name; @JsonIgnore @ManyToMany(cascade = CascadeType.PERSIST) @JoinTable(schema = "msa", name = "authority_permission", joinColumns = {@JoinColumn(name = "authority_name", referencedColumnName = "name")}, inverseJoinColumns = {@JoinColumn(name = "permission_id", referencedColumnName = "id")}) @Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) @BatchSize(size = 50) private Set<Permission> permissions = new HashSet<>(); @ManyToMany(fetch = FetchType.LAZY) @JoinTable(schema = "msa", name = "user_authority", joinColumns = {@JoinColumn(name = "authority_name", referencedColumnName = "name")}, inverseJoinColumns = {@JoinColumn(name = "user_id", referencedColumnName = "id")}) @Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) @BatchSize(size = 20) private Set<User> users = new HashSet<>(); }
@Entity @Table(name = "permission", schema = "fund") @Data @EntityListeners(AuditingEntityListener.class) public class Permission { @Id @GeneratedValue(generator = "increment") @GenericGenerator(name = "increment", strategy = "increment") private Long id; @Size(min = 3, max = 20) private String name; @Size(max = 50) private String description; private Long parentId; @Size(max = 50) private String page; @CreatedBy private String createdBy; @CreatedDate private Date createdTime; }
@Entity @Data @Table(name = "authority_permission", schema = "msa") @Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) public class AuthorityPermission { @EmbeddedId private AuthorityPermissionId id; }
@Getter @Setter @AllArgsConstructor @NoArgsConstructor public class AuthorityPermissionId implements Serializable { @Column(name = "authority_name") private String AuthorityName; @Column(name = "permission_id") private Long PermissionId; }
相关推荐
- **实体管理器(EntityManager)**:它是JPA的核心接口,用于执行CRUD(创建、读取、更新、删除)操作。 - **持久化上下文(Persistence Context)**:它是一个缓存区,存储了实体的状态,包括新实体、修改后的实体...
2. **JPAtest**:这可能是用于进行JPA基本操作的测试项目,如CRUD(创建、读取、更新、删除)操作。通过这个项目,你可以学习如何创建实体、查询数据、更新记录以及删除数据。 3. **JPAManyToMany**:这个项目展示...
在这个“JPA常用关系实现例子”中,我们将探讨四种主要的关系类型:一对一(OneToOne)、一对多(OneToMany)、多对一(ManyToOne)和多对多(ManyToMany)。这些关系定义了实体间的关联,有助于在数据库设计中创建...
总之,JPA的`@ManyToMany`注解为我们处理多对多关联提供了便利,但在实际应用中需要注意关联的维护和删除操作,以确保数据的完整性和一致性。通过理解和熟练运用这一特性,开发者能够更好地在Java应用中管理复杂的...
- **多对多 (ManyToMany)**:一个实体可以与多个其他实体建立联系,通常需要通过中间表来维护关联。 在映射关联时,我们需要指定关联的属性,使用`mappedBy`属性指定被关联方,以及设置`fetch`和`cascade`策略来...
JPA通过提供API和元数据来定义Java类如何映射到数据库表,以及如何进行CRUD(创建、读取、更新、删除)操作。 **Hibernate**是JPA的一个实现,它是一个开源的对象关系映射框架。虽然JPA定义了规范,但实际的持久化...
- `@JoinTable`: 处理多对多关系,定义中间表。 3. **身份注解**: - `@Id`: 标记一个字段作为实体的主键。 - `@IdClass`: 使用自定义的复合主键类。 - `@EmbeddedId`: 当主键由多个字段组成时使用,嵌入一个...
- **`@JoinTable`**: 定义中间表,用于多对多关系。 - **`@UniqueConstraint`**: 指定唯一的约束。 3. **身份标识** - **`@Id`**: 标识主键字段。 - **`@IdClass`**: 定义复合主键。 - **`@EmbeddedId`**: ...
8. **@JoinTable**:用于多对多关联,定义中间表的信息,包括表名、连接字段等。 9. **@OrderBy**:用于指定排序规则,例如按照某个字段升序或降序排列。 10. **@Temporal**:用于处理日期和时间类型,可以指定...
- 使用`@ManyToMany`注解来定义实体间的多对多关系,通常还需要使用`@JoinTable`来指定中间表。 #### 继承映射 - JPA支持多种继承映射策略,包括`SINGLE_TABLE`、`JOINED`和`TABLE_PER_CLASS`。 ### JPQL - **JPQL...
在本课程中,我们将深入探讨如何使用Spring JPA存储库处理多对多关联关系。Spring JPA是Spring框架的一部分,它提供了一种简单的方法来管理Java应用程序中的对象关系映射(ORM),使得开发者可以轻松地操作数据库。...
- **多对多(ManyToMany)**: 多个实体可以与多个实体关联,使用`@ManyToMany`注解,通常需要中间表来存储关联信息。 3. **查询** - **JPQL(Java Persistence Query Language)**: JPA提供的SQL的面向对象的替代...
4. **查询操作**:EJB3提供了方便的查询API,如JPA的`@NamedQuery`或`Criteria API`,可以用来检索多对多关系的数据。例如,根据用户获取其所有角色: ```java @NamedQuery(name = "getUserRoles", query = "SELECT...
1. **实体类映射:** 在Hibernate中,多对多关系通常通过中间表来实现,这个中间表通常有两个外键,分别对应两个实体。在实体类中,我们需要使用`@ManyToMany`注解来声明这种关系,并通过`@JoinTable`注解来指定中间...
在关系数据库中,多对多关系通常需要一个中间表来保存连接信息。Spring Data REST可以支持这种关系,同时,"extracolumns"意味着在多对多关联表中可能有额外的属性,这在处理复杂业务场景时十分常见。 学习这些示例...
- **多对多(ManyToMany)**: 一个实体可以与多个其他实体关联,其他实体也可与之关联,使用`@ManyToMany`,需要中间表。 6. **继承映射** - **单表继承(Single Table Inheritance)**: 所有子类映射到同一张表...
在JPA中,多对多关系默认不会自动创建中间连接表,如果需要自定义连接表,可以使用`@ManyToMany`和`@JoinTable`注解。`@JoinTable`可以定义连接表的名称、外键列名以及两个实体在连接表中的引用列。 至于"UUID",它...
- **多对多(ManyToMany)**: 多个实体实例对应多个实体实例,通常通过中间表来关联。 5. **懒加载与即时加载** - **懒加载(Lazy Loading)**: 默认情况下,关联的实体在需要时才加载,节省了内存资源。 - **...
这里的`@ManyToMany`注解表示多对多关系,`mappedBy`属性指定对方实体的属性名,`@JoinTable`定义了中间表的信息。 ### CRUD操作 CRUD是Create(创建)、Read(读取)、Update(更新)和Delete(删除)的缩写,是...
4. **中间表和@JoinTable**: 多对多关系通常涉及一个中间表,用于存储两个实体的关联。@JoinTable注解用于定义这个中间表,包括其名称、连接字段等。 5. **Spring MVC**:Spring MVC是Spring框架的一个模块,负责...