带鉴别器列的Java JPA
我对鉴别器列和鉴别器值有问题 我的期望是:带鉴别器列的Java JPA,java,hibernate,jpa,inheritance,discriminator,Java,Hibernate,Jpa,Inheritance,Discriminator,我对鉴别器列和鉴别器值有问题 我的期望是: -类型一、类型二、类型三是与用户相关的选项。 -用户只能有一行TypeOne。 -一个用户可以有两个或三个类型的多行。 -我使用Pageable作为搜索条件,并按typeOneEntity进行排序。optionCode 用户表。 |id |用户id| |-|-| |1114|a@a.com| 用户选项表。 |id |用户id |选项|代码|选项|类型|名称| |-|-|-|-| |1 | 1114 |代码| 1 |类型| 1| |2 | 1114 |代
-类型一、类型二、类型三是与用户相关的选项。
-用户只能有一行TypeOne。
-一个用户可以有两个或三个类型的多行。
-我使用Pageable作为搜索条件,并按typeOneEntity进行排序。optionCode 用户表。 |id |用户id| |-|-| |1114|a@a.com| 用户选项表。 |id |用户id |选项|代码|选项|类型|名称| |-|-|-|-| |1 | 1114 |代码| 1 |类型| 1| |2 | 1114 |代码| 2 |类型|2| |3 | 1114 |代码| 3 |类型| 2| |4 | 1114 |代码| 4 |类型| 3| Ps.User.id=UserOption.User\u 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;
}
在构建并尝试查找数据后,我发现了两个问题。1.在typeOneEntity(@OneToOne)上,为空。
2.在OneToMany上:我收到了这个错误ORA-01722:无效号码(来自Hibernate的错误消息) 我创建的实体模型是否正确?
或者它需要更改实体模型。您可能需要为每个子类使用单独的联接列“无效数字”似乎不相关,但是,您的设置可能存在另一个问题。请共享堆栈跟踪和生成的SQL。
@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 {
}