Идентификатор, который будет взят от родительской стороны - Hibernate один к одному - PullRequest
0 голосов
/ 30 сентября 2018

У меня есть класс 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...