如何为Spring Boot JPA中@ManyToMany关联表指定Schema
解决JPA自动生成关联表未指定Schema的问题
针对你遇到的PostgreSQL下JPA自动生成的user_roles关联表未指定Schema导致的报错,有两种可行的解决方式:
方式一:全局配置默认Schema
在Spring Boot配置文件中指定Hibernate的默认Schema,所有自动生成的表(包括关联表)都会默认使用该Schema。
application.properties配置:
spring.jpa.properties.hibernate.default_schema=test
application.yml配置:
spring: jpa: properties: hibernate: default_schema: test
方式二:手动指定关联表的Schema
在User实体类的roles字段上添加@JoinTable注解,明确指定关联表的Schema、表名及关联字段:
修改后的User实体类代码:
@Entity @Table(schema = "test") @Data @NoArgsConstructor @AllArgsConstructor public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String username; private String password; private String group_id; private String email; @ManyToMany(fetch = FetchType.EAGER) @JoinTable( schema = "test", name = "user_roles", // 可自定义表名,默认即为user_roles joinColumns = @JoinColumn(name = "user_id"), inverseJoinColumns = @JoinColumn(name = "role_id") ) private Collection<Role> roles = new ArrayList<>(); }
两种方式均可解决问题:方式一适合所有表共用同一Schema的场景,方式二更灵活,可针对单个关联表单独配置。
内容的提问来源于stack exchange,提问作者m3k_1
相关产品推荐
相关产品推荐

