代码之家  ›  专栏  ›  技术社区  ›  Arian

从父端获取的ID-休眠一对一关系

  •  0
  • Arian  · 技术社区  · 7 年前

    我有一节课 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 ,它应该与 用户帐户实体 . 令我困惑的是 用户帐户实体 生成于 用户实体 . 我不知道该如何定义它的id?

    我创建了一个类 用户帐户活动代码 :

    @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() {}
    
    }
    

    但我该如何在 用户帐户实体 班级和地点 用户帐户实体 从那个案子里得到身份证?

    更新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
    
    0 回复  |  直到 7 年前