繁体   English   中英

如何在Hibernate / JPA中实现“可选”关系?

[英]How do I implement an “optional” relationship in Hibernate/JPA?

我正在使用JPA的Hibernate 3.6实现。 我在逻辑上的父子关系中有两个表。 通常,“父级”中的每个记录在“子级”中都有一个记录。 这些表如下所示:

CREATE TABLE FOO (
  FOO_ID INT IDENTITY,
  BAR_ID INT DEFAULT 0 NOT NULL,
  SOMEDATA CHAR(50) );

CREATE TABLE BAR (
  BAR_ID INT IDENTITY,
  OTHERDATA CHAR(50),
  STILLOTHER CHAR(50)) ;

但是,已经决定某些“父”记录不应具有“子”记录,而我应该在FOO.BAR_ID列中仅输入0

如何在实体类中实现此功能? 现在,这些类如下所示:

public class Foo implements java.io.Serializable {
    @Id
    @GeneratedValue
    @Column(name = "FOO_ID", unique = true, nullable = false)
    private Long fooId;
    @OneToOne(cascade = {CascadeType.MERGE, CascadeType.PERSIST})
    @JoinColumn(name = "BAR_ID", nullable = false)
    private Bar bar;
    }


public class Bar implements java.io.Serializable {
    @Id
    @GeneratedValue
    @Column(name = "BAR_ID", unique = true, nullable = false)
    private Long barId;

)

我似乎找不到正确的语法在FOO.BAR_ID列中放置0 ,并且不尝试在BAR表中创建记录。 甚至可以用Hibernate完成吗?

@OneToOne(cascade = {CascadeType.MERGE, CascadeType.PERSIST})
@JoinColumn(name = "BAR_ID", nullable = false)

我相信您应该尝试删除。

nullable = false

您是在告诉休眠状态,Foo's Bar不能为null。 如果Bar是可选的,则有时它必须为null。 由于它不能为null且CascadeType为Persist,因此Hibernate将保存Foo时Foo必须具有的Bar。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM