带有 DiscriminatorColumn 的 Java JPA

问题描述

我在使用 discriminatorColumndiscriminatorValue 时遇到问题。

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

排序

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

UserOption 表。 |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

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

app2_foo
@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",updatable = false)
    private Set<TypeTwo> typeTwoentities;

    @OnetoMany(cascade = CascadeType.ALL)
    @JoinColumn(name = "id",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 {
}

在我构建并尝试查找数据后,我发现了两个问题。
1.On typeOneEntity(@OnetoOne) 为空。
2.On @OnetoMany : 我收到这个错误 ora-01722: invalid number (error message from Hibernate)

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

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)