0

我有 2 张桌子:

Table A
   Id (primary key)
   Name
   request_Id 



Table B
   request_Id (primary key)
   request_param

这两个表之间的关系是 request_id,虽然没有外键约束,这意味着即使表 B 中没有该 request_id 的记录,表 A 中也可以存在一条记录。我还要声明这是来自 A --> B 的单向关系

以下是 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 中没有相应记录的 B 中的记录加载实体 A 时,出现异常“org.hibernate.ObjectNotFoundException:不存在具有给定标识符的行”

我打印了 sql,我看到了 2 个查询,一个用于表 A,一个用于表 B 的外部连接,然后另一个用于表 B 的查询。

我不确定它为什么会这样做。当我在 DB 中执行第一个查询时,它工作正常。谁能指出我做错了什么或提供一些解决问题的指示?

4

1 回答 1

0

当表 B 中没有记录时,表 A 中具有非空值的唯一原因是因为表 B 是事后才想到的。如果表B中有记录,则该设计满足执行某些任务的要求,否则该过程终止。

我避免使用@NotFound,但我认为我没有其他选择,或者是否有保持相同的表格设计?

于 2012-06-15T07:09:02.930 回答