我有两张桌子:
Table A
Id (primary key)
Name
request_Id
Table B
request_Id (primary key)
request_param
这两个表之间的关系是由request_id,但是,没有外键约束,这意味着,即使表B中没有该request_id的记录,表A中也可以存在记录。我还要声明这是来自A - >的单向关系;乙
以下是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
中没有记录当我在A中为A中没有相应记录的记录加载实体A时,我得到一个异常,“org.hibernate.ObjectNotFoundException:没有给定标识符的行存在”
我打印sql,我看到2个查询,一个用于表A,一个用于表B的外连接,然后是另一个用于表B的查询。
我不确定为什么会这样做。当我在DB中执行第一个查询时,它工作正常。任何人都可以指出我做错了什么或提供解决问题的一些指示吗?
答案 0 :(得分:0)
当表B中没有记录时,表A中具有非空值的唯一原因是因为表B是事后的想法。如果表B中有记录,则设计满足执行某些任务的要求,否则该过程终止。
我一直在避免使用@NotFound
,但我认为我没有其他选择,或者在那里,保持相同的桌面设计?