微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

带有 DiscriminatorColumn 的 Java JPA

如何解决带有 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 举报,一经查实,本站将立刻删除。