可为空的实体的Hibernate注释映射

时间:2012-06-15 03:30:27

标签: hibernate annotations mapping

我有两张桌子:

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中执行第一个查询时,它工作正常。任何人都可以指出我做错了什么或提供解决问题的一些指示吗?

1 个答案:

答案 0 :(得分:0)

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

我一直在避免使用@NotFound,但我认为我没有其他选择,或者在那里,保持相同的桌面设计?