Hibernate:在Spring中保存复杂的数据模型

时间:2017-05-27 17:03:50

标签: java spring hibernate

我的数据模型有一个实体网络。使用@OneToOne@ManyToOne等相互引用的一组实体。其中一些引用定义为@NotNull

@Entity
@Table(name="UserDetails")
public class CustomUserDetails implements Serializable {
    @NotNull
    @JoinColumn(name="user_id", referencedColumnName="id")
    @OneToOne(cascade=CascadeType.ALL, fetch=FetchType.EAGER)
    private User user;
    //.....
}

CustomUserDetailsService处理从数据库中保存和加载CustomUserDetails类的实例,UserDetailsRepository是一个扩展CrudRepisitory的接口。

当用户拨打/signup时,我们要创建CustomUserDetails的实例并将其保存到数据库。但是在服务器持久存在CustomUserDetails的新实例之前,它必须创建类型为User的新实例并将其保存到db(因为它定义为@NotNull)。

CustomUserDetailsService中,在Controller中执行此操作是否有意义?还是在哪里?

我担心设计过于复杂,当数据模型变得更复杂时,不同实体的服务类之间会有很多交叉引用。

1 个答案:

答案 0 :(得分:0)

遵循相同的风格,你应该有一个类似" UserService" 的类来处理用户的CRUD操作。 类 CustomUserDetailsS​​ervice 应该包含 UserService 的成员,最好使用@Autowire注释。

在创建新的自定义用户详细信息之前,请调用 UserService 以创建新用户(如果需要)。

原则上它可以在此结束, CustomUserDetailsS​​ervice 熟悉 UserService ,反之亦然。 您已定义 cascade = CascadeType.ALL ,因此如果删除用户,客户用户详细信息也会被删除。

确保 CustomUserDetails 的其他关系正确定义了它们的级联。