在hibernate中更新@onetoone映射中的一个表

时间:2016-09-06 12:34:04

标签: java postgresql hibernate jpa

jpa class是这样的:

public class JpaAlertConfiguration{
...
   @OneToOne(fetch = FetchType.EAGER)
    @Fetch(FetchMode.JOIN)
    @JoinColumn(name = "alert_type_id", nullable = false, referencedColumnName = "id", insertable = false, updatable = false)
    private JpaAlertType         alertType;
}

从此类方法调用Create Entity。

@Override
@Transactional
public JpaAlertConfiguration createEntity(JpaAlertConfiguration entity) throws Exception
{
    getAuthorizer().checkCreate(ENTITY_NAME);
    validateFields(entity);

    getAuthorizer().checkAccountAccess(entity.getAccount().getId(), null);
    entity = attachAssociatedEntities(entity);
    // entity.setStatusColumns(new StatusColumns().setStatus(ResourceStatus.Disabled));
    entity = super.createEntity(entity);
    entity = transformResult(entity);
    return entity;
}

我确保在调用此行entity = super.createEntity(entity);之前,填充JpaAlertType id值,这只是" alert_type_id" alertConfig表。

我得到例外:

  

引起:org.postgresql.util.PSQLException:错误:列中的空值" alert_type_id"违反非空约束     详细信息:失败的行包含(3,速度警报,超速警报,5,t,null,启用,0,2016-09-06 17:56:30.556 + 05:30,2016-09-06 17:56:30.58+ 05:30,2016-09-06 17:56:30.556 + 05:30,null,f,f)。

请建议

2 个答案:

答案 0 :(得分:0)

我认为您缺少JPA持久订单,请参阅以下关于JPA one-to-one insert的链接,我希望这可能有所帮助。

答案 1 :(得分:0)

问题是解决的: 实际上在我的场景中我调用了泛型createEntity方法。不确定,但我刚从中删除了所有复杂的注释 JPAAlertConfiguration类中的alertType变量

 @OneToOne(optional = false)
 @JoinColumn(name = "alert_type_id")
 private JpaAlertType         alertType;

它有效。不管怎样,谢谢