带hibernate映射的Spring引导数据JPA
我在带hibernate映射的Spring引导数据JPA,spring,hibernate,spring-boot,spring-data-jpa,hibernate-mapping,Spring,Hibernate,Spring Boot,Spring Data Jpa,Hibernate Mapping,我在springbootprojectconnectwithJPA工作。我被困在用户和角色之间的映射多对多关系中。我正在使用持久性工具根据模式表生成java类 表用户的Sql脚本: CREATE TABLE "MPOSML"."USERS" ( "USER_ID" VARCHAR2(32 BYTE), "USER_NAME" VARCHAR2(64 BYTE), "PASSWORD" VARCHAR2(64 BYTE), "BRANCH_ID" VAR
springboot
projectconnectwithJPA
工作。我被困在用户
和角色
之间的映射多对多
关系中。我正在使用持久性工具根据模式表生成java类
表用户的Sql脚本:
CREATE TABLE "MPOSML"."USERS"
( "USER_ID" VARCHAR2(32 BYTE),
"USER_NAME" VARCHAR2(64 BYTE),
"PASSWORD" VARCHAR2(64 BYTE),
"BRANCH_ID" VARCHAR2(6 BYTE),
"GROUP_ID" VARCHAR2(16 BYTE),
"ENABLED" VARCHAR2(5 BYTE),
"CREATE_BY" VARCHAR2(16 BYTE),
"CREATED_ON" DATE,
"MODIFIED_BY" VARCHAR2(16 BYTE),
"MODIFIED_ON" DATE,
"VERSION_NUMBER" NUMBER(4,0),
"PREFERED_LOCALE" VARCHAR2(5 BYTE) DEFAULT 'en',
"PREFERED_THEME" VARCHAR2(20 BYTE),
"FAILED_ATTEMPTS" NUMBER(3,0) DEFAULT 0,
"CLIENT_ID" VARCHAR2(16 BYTE),
"TEL" VARCHAR2(30 BYTE),
"EMAIL" VARCHAR2(120 BYTE),
"C_SMS" VARCHAR2(5 BYTE) DEFAULT 'false',
"C_IDEVICE" VARCHAR2(5 BYTE) DEFAULT 'false',
"C_WEB" VARCHAR2(5 BYTE) DEFAULT 'false',
"C_ANDROID" VARCHAR2(5 BYTE) DEFAULT 'false',
"DEVICE_CODE" VARCHAR2(2000 BYTE) DEFAULT 'WEB',
"ISAUTHORIZE" VARCHAR2(5 BYTE),
CONSTRAINT "USERS_ENABLED_CHECK" CHECK ("ENABLED" IS NOT NULL) ENABLE NOVALIDATE,
CONSTRAINT "USERS_GROUP_ID_CHECK" CHECK ("GROUP_ID" IS NOT NULL) ENABLE NOVALIDATE,
CONSTRAINT "USERS_PASSWORD_CHECK" CHECK ("PASSWORD" IS NOT NULL) ENABLE NOVALIDATE,
CONSTRAINT "USERS_USER_NAME_CHECK" CHECK ("USER_NAME" IS NOT NULL) ENABLE NOVALIDATE,
CONSTRAINT "PK_USERS" PRIMARY KEY ("USER_ID", "CLIENT_ID")
USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "MPOS" ENABLE
) SEGMENT CREATION IMMEDIATE
PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
STORAGE(INITIAL 3145728 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "MPOS" ;
表角色的sql
CREATE TABLE "MPOSML"."ROLES"
( "ROLE_ID" VARCHAR2(16 BYTE),
"ROLE_NAME" VARCHAR2(64 BYTE),
"ENABLED" VARCHAR2(5 BYTE),
"CREATED_BY" VARCHAR2(16 BYTE),
"CREATED_ON" DATE,
"MODIFIED_BY" VARCHAR2(16 BYTE),
"MODIFIED_ON" DATE,
"VERSION_NUMBER" NUMBER(4,0),
"ROLE_GROUP" VARCHAR2(20 BYTE),
CONSTRAINT "ROLES_ENABLED_CHECK" CHECK ("ENABLED" IS NOT NULL) ENABLE NOVALIDATE,
CONSTRAINT "ROLES_ROLE_NAME_CHECK" CHECK ("ROLE_NAME" IS NOT NULL) ENABLE NOVALIDATE,
CONSTRAINT "ROLES_UNIQUE_KEY" UNIQUE ("ROLE_NAME")
USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS
STORAGE(INITIAL 2097152 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "MPOS" ENABLE,
CONSTRAINT "PK_ROLES" PRIMARY KEY ("ROLE_ID")
USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS
STORAGE(INITIAL 2097152 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "MPOS" ENABLE
) SEGMENT CREATION IMMEDIATE
PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
STORAGE(INITIAL 3145728 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "MPOS" ;
CREATE TABLE "MPOSML"."USERS_ROLES"
( "USER_ID" VARCHAR2(16 BYTE),
"ROLE_ID" VARCHAR2(16 BYTE),
"SELECTED" VARCHAR2(5 BYTE),
"CREATED_BY" VARCHAR2(16 BYTE),
"CREATED_ON" DATE,
"MODIFIED_BY" VARCHAR2(16 BYTE),
"MODIFIED_ON" DATE,
"VERSION_NUMBER" NUMBER(4,0),
"CLIENT_ID" VARCHAR2(16 BYTE),
CONSTRAINT "USERSROLES_PRIMARY_KEY" PRIMARY KEY ("CLIENT_ID", "USER_ID", "ROLE_ID")
USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS
STORAGE(INITIAL 131072 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "MPOS" ENABLE,
CONSTRAINT "FK_USERSROLES_ROLE_ID" FOREIGN KEY ("ROLE_ID")
REFERENCES "MPOSML"."ROLES" ("ROLE_ID") ON DELETE CASCADE ENABLE NOVALIDATE
) SEGMENT CREATION IMMEDIATE
PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
STORAGE(INITIAL 3145728 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "MPOS" ;
表用户的SQL\u角色
CREATE TABLE "MPOSML"."ROLES"
( "ROLE_ID" VARCHAR2(16 BYTE),
"ROLE_NAME" VARCHAR2(64 BYTE),
"ENABLED" VARCHAR2(5 BYTE),
"CREATED_BY" VARCHAR2(16 BYTE),
"CREATED_ON" DATE,
"MODIFIED_BY" VARCHAR2(16 BYTE),
"MODIFIED_ON" DATE,
"VERSION_NUMBER" NUMBER(4,0),
"ROLE_GROUP" VARCHAR2(20 BYTE),
CONSTRAINT "ROLES_ENABLED_CHECK" CHECK ("ENABLED" IS NOT NULL) ENABLE NOVALIDATE,
CONSTRAINT "ROLES_ROLE_NAME_CHECK" CHECK ("ROLE_NAME" IS NOT NULL) ENABLE NOVALIDATE,
CONSTRAINT "ROLES_UNIQUE_KEY" UNIQUE ("ROLE_NAME")
USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS
STORAGE(INITIAL 2097152 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "MPOS" ENABLE,
CONSTRAINT "PK_ROLES" PRIMARY KEY ("ROLE_ID")
USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS
STORAGE(INITIAL 2097152 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "MPOS" ENABLE
) SEGMENT CREATION IMMEDIATE
PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
STORAGE(INITIAL 3145728 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "MPOS" ;
CREATE TABLE "MPOSML"."USERS_ROLES"
( "USER_ID" VARCHAR2(16 BYTE),
"ROLE_ID" VARCHAR2(16 BYTE),
"SELECTED" VARCHAR2(5 BYTE),
"CREATED_BY" VARCHAR2(16 BYTE),
"CREATED_ON" DATE,
"MODIFIED_BY" VARCHAR2(16 BYTE),
"MODIFIED_ON" DATE,
"VERSION_NUMBER" NUMBER(4,0),
"CLIENT_ID" VARCHAR2(16 BYTE),
CONSTRAINT "USERSROLES_PRIMARY_KEY" PRIMARY KEY ("CLIENT_ID", "USER_ID", "ROLE_ID")
USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS
STORAGE(INITIAL 131072 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "MPOS" ENABLE,
CONSTRAINT "FK_USERSROLES_ROLE_ID" FOREIGN KEY ("ROLE_ID")
REFERENCES "MPOSML"."ROLES" ("ROLE_ID") ON DELETE CASCADE ENABLE NOVALIDATE
) SEGMENT CREATION IMMEDIATE
PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
STORAGE(INITIAL 3145728 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "MPOS" ;
然后,在生成java类之后,它包含3个文件:角色、用户和UsersPK
类用户SPK
public class UsersPK implements Serializable {
private String userId;
private String clientId;
@Column(name = "USER_ID")
@Id
public String getUserId() {
return userId;
}
public void setUserId(String userId) {
this.userId = userId;
}
@Column(name = "CLIENT_ID")
@Id
public String getClientId() {
return clientId;
}
public void setClientId(String clientId) {
this.clientId = clientId;
}
}
类用户
@Entity
@IdClass(UsersPK.class)
public class Users {
private String userId;
private String userName;
private String clientId;
@ManyToMany
private Set<Roles> roles;
@JoinTable(
name = "users_roles",
joinColumns = @JoinColumn(name = "user_id"),
inverseJoinColumns = @JoinColumn(name = "role_id")
)
public Set<Roles> getRoles() {
return roles;
}
public void setRoles(Set<Roles> roles) {
this.roles = roles;
}
//getter and setter
}
@Entity
public class Roles {
private String roleId;
private String roleName;
private String enabled;
private String createdBy;
private Time createdOn;
private String modifiedBy;
private Time modifiedOn;
private Long versionNumber;
private String roleGroup;
@ManyToMany(mappedBy = "roles")
private Set<Users> users;
//getter & setter
}
我在一些文章中进行了研究,发现它们的映射与我的相同,不知道这篇文章会发生什么
任何解决方案都将不胜感激。谢谢并致以问候。删除
mappedBy
您可以执行mappedBy
操作,也可以执行联接表操作,但不能同时执行。您好,请尝试删除mappedBy并保留联接表,但结果仍然相同。无论如何,谢谢。你的@JoinTable
应该在字段上,而不是getter上。此外,注释应该位于get/set方法或字段上,而不是同时位于两者。