У меня есть класс UserAccountEntity
, который находится в соотношении один к одному с UserEntity
:
@Entity
@Table(name = "user_entity")
public class UserEntity implements Serializable {
private static final long serialVersionUID = 2059380022311094257L;
@Id
@GeneratedValue(generator = RandomAlphanumericIdGenerator.generatorName)
@GenericGenerator(name = RandomAlphanumericIdGenerator.generatorName, strategy = "com.myproject.project.core.utils.RandomAlphanumericIdGenerator")
private String id;
public UserEntity() {}
}
@Entity
@Table(name="user_account_entity")
public class UserAccountEntity implements UserDetails {
@Id
private String id;
@MapsId
@OneToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
private UserEntity user;
}
Теперь я хочу добавить другой класс UserAccountActivityCode
, который должен быть в одноми одно отношение с UserAccountEntity
.Что меня смущает, так это то, что идентификатор UserAccountEntity
генерируется в UserEntity
.Интересно, как мне определить его идентификатор?
Я создал класс UserAccountActivityCode
:
@Entity
@Table(name = "User_account_activity_code")
public class UserAccountActivityCode implements Serializable {
@Id
@GeneratedValue(generator = RandomAlphanumericIdGenerator.generatorName)
@GenericGenerator(name = RandomAlphanumericIdGenerator.generatorName, strategy = "com.myproject.project.core.utils.RandomAlphanumericIdGenerator")
private String id;
public UserAccountActivityCode() {}
}
Но как я должен ссылаться на него в классе UserAccountEntity
и где это UserAccountEntity
получить идентификатор в этом случае?
Обновление 1: я вынул GeneratedValue
из UserAccountActivityCodeEntity
и добавил setUserId
, чтобы установить его при сохранении:
@Entity
@Table(name="user_account_activity_code_entity")
public class UserAccountActivityCodeEntity {
private final static int ACTIVITY_CODE_LENGTH = 6;
@Id
private String userId;
private String acitivityCode;
public UserAccountActivityCodeEntity(String id) {
this.acitivityCode = RandomStringUtils.randomAlphanumeric(ACTIVITY_CODE_LENGTH);
this.userId = id;
}
public String getUserId() {
return userId;
}
public void setUserId(String userId) {
this.userId = userId;
}
public String getAcitivityCode() {
return acitivityCode;
}
public void setAcitivityCode(String acitivityCode) {
this.acitivityCode = acitivityCode;
}
}
ИВ моем слое обслуживания есть следующий код:
userAccount = new UserAccountEntity(username,
passwordEncoder.encode(password));
userAccount.setUser(new UserEntity());
UserAccountActivityCodeEntity activityCode = new UserAccountActivityCodeEntity(userAccount.getId());
userAccount.setActivityCode(activityCode);
userAccountRepository.save(userAccount);
, что приводит к этой ошибке:
org.hibernate.id.IdentifierGenerationException: ids for this class must be manually assigned before calling save(): com.myproject.project.core.entity.useraccount.UserAccountActivityCodeEntity