Java @OneToOne关系-NOT NULL属性在Hibernate中保持为NULL,没有错误

Java @OneToOne关系-NOT NULL属性在Hibernate中保持为NULL,没有错误,java,hibernate,one-to-one,Java,Hibernate,One To One,我有以下@OneToOne映射配置(仅相关部分): 实体商标 @OneToOne(mappedBy = "trademark", optional = false, cascade = CascadeType.MERGE) private ReferenceNumber referenceNumber; 实体ReferenceNumber @OneToOne(optional = true) private Trademark trademark; 数据库:允许referencenumber

我有以下@OneToOne映射配置(仅相关部分):

实体
商标

@OneToOne(mappedBy = "trademark", optional = false, cascade = CascadeType.MERGE)
private ReferenceNumber referenceNumber;
实体
ReferenceNumber

@OneToOne(optional = true)
private Trademark trademark;
数据库:允许
referencenumber.trademark\u id
为空FK,在
trademark
表中没有引用列

我使用以下代码进行实体分配:

    Session session = HibernateUtil.getSessionFactory().openSession();
        long start = System.currentTimeMillis();
        Transaction tx = null;
        try {
            tx = session.beginTransaction();
                            //private ReferenceNumber ref;
            ref.setError(0);
                            // Trademark trademark;
            trademark.setReferenceNumber(ref);
            trademark.setService(ref.getService());
            session.save(trademark);
            ref.setTrademark(trademark);
            session.update(ref);
            tx.commit();
            log.debug("Inserted row id={}", trademark.getId());
        } catch (RuntimeException ex) {
            log.error("Error during attempt to persist new trademark", ex);
            if (tx != null) {
                tx.rollback();
            }
            throw ex;
        } finally {
            session.close();
            log.trace("Db processing time: {}ms", System.currentTimeMillis() - start);
        }

现在我注意到,在很多情况下(但并非所有情况下),商标都会保留在DB中,但在
referencenumber
中未设置FK to
trademark
!我使用这种配置已经有相当长的时间了(大约4个月),我以前从未遇到过这种行为。运行时不会引发任何错误。这种行为的原因是什么?不久前,我将Hibernate版本升级到
4.2.1.Final
。可能的错误?

TopLink
实现中
optional=false
不会在生成的架构中强制使用非null外键,如果要应用此约束,必须使用
@joincolm
注释中的
null
选项

@JoinColumn(nullable = false)
private ReferenceNumber referenceNumber;
注意:如果您尝试了其他一些JPA实现,它可能会将
optional=false
解释为NOTNULL约束