首页 > 解决方案 > Java JPA with DiscriminatorColumn

问题描述

我对DiscriminatorColumnDiscriminatorValue有疑问。

我的期望是:
-TypeOne、TypeTwo、TypeThree 是与用户相关的选项。
- 一个用户只能有 1 行 TypeOne。
- 一个用户可以有 TypeTwo 或 TypeThree 多行。
-我使用 Pageable 作为搜索条件并按typeOneEntity.optionCode排序

用户表。 |id|user_id| |-|-| |1114|a@a.com|

用户选项表。 |id|user_id|option_code|option_type_name| |-|-|-|-| |1|1114|CODE_1|TYPE_1| |2|1114|CODE_2|TYPE_2| |3|1114|CODE_3|TYPE_2| |4|1114|CODE_4|TYPE_3|

附言。User.id = UserOption.user_id

我必须创建三个实体映射到该数据。

@Entity
@Table(name = "user")
public class User{
    @Column()
    private Long id;

    @Column()
    private String userId;

    @OneToOne(cascade = CascadeType.ALL)
    @JoinColumn(name = "id", referencedColumnName = "user_id", insertable = false, updatable = false)
    private TypeOne typeOneEntity;

    @OneToMany(cascade = CascadeType.ALL)
    @JoinColumn(name = "id", referencedColumnName = "user_id", insertable = false, updatable = false)
    private Set<TypeTwo> typeTwoEntities;

    @OneToMany(cascade = CascadeType.ALL)
    @JoinColumn(name = "id", referencedColumnName = "user_id", insertable = false, updatable = false)
    private Set<TypeThree> typeThreeEntities;
}
@Table(name = "user_option")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "option_type_name")
public abstract class UserOption{

    @Column
    private Long id;

    @Column(name = "user_id", nullable = false)
    private Long userId;

    @Column
    private String optionCode;
}
@Entity
@DiscriminatorValue(value = "TYPE_1")
public class TypeOne extends UserOption {
}

@Entity
@DiscriminatorValue(value = "TYPE_2")
public class TypeTwo extends UserOption {
}

@Entity
@DiscriminatorValue(value = "TYPE_3")
public class TypeThree extends UserOption {
}

在我构建并尝试查找数据之后,我发现了两个问题。
1.On typeOneEntity (@OneToOne)为空。
2.在@OneToMany : 我收到这个错误 ORA-01722: invalid number (来自 Hibernate 的错误消息)

我创建的这个实体模型是否正确?或者它需要改变实体模型。

标签: javahibernatejpainheritancediscriminator

解决方案


推荐阅读