【问题标题】:EntityManager find nothing right after persistEntityManager 在坚持后什么也没找到
【发布时间】:2014-02-04 10:44:03
【问题描述】:

我在具有主键构造函数的实体上有一个 Hibernate 持久化,但是在我不知道的事情之后它在数据库中没有生效,而我在其他一些方法中需要它

这是我的代码:

Base_Document document = new Base_Document(workItem.getProcessInstanceId());

this.getEntityManager().persist(document);
this.getEntityManager().flush();
this.getEntityManager().close();

还有一些我有的地方:

Object o = this.getEntityManager().find(Base_Document.class,
    workItem.getProcessInstanceId());

其中onull。有什么帮助吗? 我的实体代码:

@Entity
public class Base_Document implements Serializable {
private static final long serialVersionUID = 1L;
@Id
private Long processInstanceId;

private DocumentStatus status;

@ManyToOne
private Base_Roles creatorRole;

@Temporal(javax.persistence.TemporalType.TIMESTAMP)
private Date createDate;

public Base_Document() {}

public Base_Document(Long processInstanceId) {
    this.processInstanceId = processInstanceId;
    this.createDate = new Date();
    this.status = DocumentStatus.DRAFT;
    try {
        String currentUser =  PublicUtils.getHttpServletRequest().getUserPrincipal().getName();
        this.setCreatorRole(PublicUtils.getEntityManager().find(Base_Roles.class, currentUser));
    } catch (PolicyContextException ex) {
        Logger.getLogger(Base_Document.class.getName()).log(Level.SEVERE, null, ex);
    }

}

public Long getId() {
    return processInstanceId;
}

public void setId(Long id) {
    this.processInstanceId = id;
}

public Long getProcessInstanceId() {
    return processInstanceId;
}

public void setProcessInstanceId(Long processInstanceId) {
    this.processInstanceId = processInstanceId;
}

public DocumentStatus getStatus() {
    return status;
}

public void setStatus(DocumentStatus status) {
    this.status = status;
}

public Base_Roles getCreatorRole() {
    return creatorRole;
}

public void setCreatorRole(Base_Roles creatorRole) {
    this.creatorRole = creatorRole;
}

public Date getCreateDate() {
    return createDate;
}

public void setCreateDate(Date createDate) {
    this.createDate = createDate;
}

}

【问题讨论】:

  • 你设置的交易模式是什么?
  • 请贴出实体代码。它可能包含几个可能导致此行为的问题。
  • 我没有看到实际的提交正在完成;冲洗可能还不够。
  • 事务模式是 JTA (Crossfire) 并且这里绝对没有提交,因为它是自动提交 (Gimby) 和 (kostja) 实体代码添加

标签: java hibernate transactions persist


【解决方案1】:

来自Hibernate“持久化”的描述:

但是,它不保证标识符值会立即分配给持久化实例

https://access.redhat.com/site/documentation/en-US/JBoss_Enterprise_Web_Platform/5/html/Hibernate_Core_Reference_Guide/objectstate-makingpersistent.html

如果需要立即搜索,您可以使用“save()”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-25
    • 1970-01-01
    • 1970-01-01
    • 2011-12-18
    • 2018-09-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多