为空的实体
问题描述:
的Hibernate注解映射我有2个表:为空的实体
Table A
Id (primary key)
Name
request_Id
Table B
request_Id (primary key)
request_param
这两个表之间的关系是由REQUEST_ID,虽然,没有任何外键约束,这意味着,记录在表中存在一个即使在表B.该REQUEST_ID没有记录我还要指出,这是一个来自一个单向的关系 - “乙
以下是2个表中标注的映射:
@Entity...
class A
{
@Id
private int id;
@Column
private String Name;
@Column(name="request_id")
private String requestId
@ManyToOne(optional = true)
@JoinColumn(name="request_id", insertable=false, updatable=false)
private B b;
}
@Entity...
class B
{
@Id
@Column(name="request_id")
private String requestId;
@Column(name="param")
private String param;
}
考虑这个表中的数据:
table A
id = 1
name = "temp"
request_id = "A"
有B中
没有记录,当我加载实体一种用于记录不具有在B中的相应的记录,我得到一个例外,“ org.hibernate.ObjectNotFoundException:具有给定标识符的行存在”
我输出SQL,我看2个查询,一个用于表A和一个外连接表B,然后另一查询表B.
我不确定为什么它这样做。当我在DB中执行第一个查询时,它工作正常。任何人都可以指出我在做什么错误或提供一些指针来解决问题?
答
当表B中没有记录时,在表A中具有非空值的唯一原因是因为表B是事后考虑的。如果表B中有记录,该设计迎合执行某些任务的要求,否则该过程终止。
我是在避免使用@NotFound
,但我不认为我有任何其他选择,或者有,保持相同的表设计?
如果您使用的是列作为外键和列不为空,然后你告诉Hibernate的,应该有另一个表对应的实体。鉴于数据,情况并非如此。为什么'request_id'没有设置为'null',因为外表中没有相应的行?换句话说:当表B中没有行时,为什么在表A的request_Id中有一个非空值是有意义的? –