首页 > 解决方案 > 在 java hibernate 中你可以有一个不是实体的模型吗?

问题描述

尝试编译时出现此错误org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Invocation of init method failed; nested exception is org.hibernate.AnnotationException: Use of @OneToMany or @ManyToMany targeting an unmapped class: com.core.model.Team.members[com.core.model.User]

我的模型称为 User,它用于组合另外两个模型,一个从 keycloak 获取数据,另一个从 Postgres 获取数据。此表不使用@entity,因为它未附加到表。有什么我想念的吗。

这是代码

@Data
public class User {

   @NonNull
    private KeycloakUser keycloakUser;
 
    private OtherUser otherUser;

    public User(@NonNull KeycloakUser keycloakUser, @NonNull OtherUser otherUser) {
        this.keycloakUser = keycloakUser;
        this.otherUser = otherUser;
    }
}

标签: javaspringhibernatemodel

解决方案


您必须有一个不是实体的模型。您的模型类必须与实体分开。

class User {
             
  private KeycloakUser keycloakUser;
             
  private OtherUser otherUser;
             
}

User user = new User();
userService.saveUser(user);

// UserService

void saveUser(User user) {
    UserEntity userEntity = userMapper.toUserEntity(user.getOtherUser());
    userRespository.save(userEntity);

    CreateUserRequest request = userMapper.toCreateUserRequest(user.getKeycloakUser());
    keyCloakClient.createUser(request);
}

// UserMapper

UserEntity toUserEntity(OtherUser user) {
    UserEntity result = new UserEntity();
    result.setName(user.getName());

    return resut;
}
   

推荐阅读