当前位置: 首页 > 知识库问答 >
问题:

实体管理器。查找包含2id作为主键的对象的行为

秦彦君
2023-03-14

我开始进入Java世界,我很难理解这一点。

我正在使用JPA与带有JPQL的数据库进行交互。

我有一个像这样的持续课程:

@Entity
@Table(name="C_A_T")
@NamedQuery(name="CAT.findAll", query="SELECT c FROM CAT c")
public class CAT implements Serializable {
    private static final long serialVersionUID = 1L;
    @EmbeddedId
    private CATPK id;
    private String offer;
    @Temporal(TemporalType.DATE)
    @Column(name="MODIF_DATE")
    private Date modifDate;


    public CAT() {}
    public CATPK getId() {return id;}
    public void setId(CATPK id) {this.id = id;}
    public String getOffer() {return offer;}
    public void setOffer(String offer) {this.offer = offer;} 
    public Date getModifDate() {return modifDate;}
    public void setModifDate(Date modifDate) {this.modifDate= modifDate;}
    /* ... */
}

CATPK表示CAT实例的主键:

@Embeddable
public class CATPKimplements Serializable {
    //default serial version id, required for serializable classes.
    private static final long serialVersionUID = 1L;
    @Column(name="ID_CAT")
    private String idCAT;
    @Column(name="ID_DEMANDE")
    private String idDemande;

    public CATPK() {}
    public String getIdCAT() {return this.idCAT;}
    public void setIdCAT(String idCAT) {this.idCat= idCat;}
    public String getIdDemande() {return this.idDemande;}
    public void setIdDemande(String idDemande) {this.idDemande = idDemande;}
    /* ...*/
}

所以基本上,priMay密钥是由两个不同的ID组成的。

现在,有时在我的数据库中插入CAT之前,我会检查它是否不在C_a_Ttable中:

EntityManagerFactory emf = Persistence.createEntityManagerFactory("cie");
em = emf.createEntityManager();
em.getTransaction().begin();
// inCAT is an instance of CAT on which there is a complete primary key CATPK (made of 2 id)
CAT CATinDB = em.find( CAT.class, inCAT.getId() );
if (null == CATinDB)
  em.persist(inCAT); // CAT created
em.getTransaction().commit();
em.close();

现在,问题是em.find(CAT.class,inCAT.getId () );行没有在应该返回null的时候返回。

例如,当我实际上没有右idCATidDemande

那么< code>find会认为它只找到了< code>catPK匹配的一个id吗?

最后,我换了一句台词:

if (null == CATinDB)

到:

if (null == CATinDB || CATinDB.getId().getIdCAT() != inCAT.getId().getIdCAT() || CATinDB.getId().getIdDemande() != inCAT.getId().getIdDemande())

当我没有与2 id匹配的记录时,不确定为什么find没有返回null。

共有1个答案

邵弘伟
2023-03-14

实际上,我只需要重新启动我的weblogic服务器。看起来我更新数据库时数据源没有动态更新。

 类似资料:
  • 问题内容: 给定这样的结构: 是否可以将其映射到: 这样,您最终获得的实例的属性分别设置为和? 问题答案: 我坚信将您的POJO与外部化分开。将您的JSON读取到Map中,然后像这样构建您的Container / ScoreKeeper对象(对于任何错别字都为apols):

  • > 检查Postgres JSON数组是否包含字符串 在postgreSQL中从表中查询json对象 带有嵌入JSON对象的PostgreSQL JSON查询 如何实现这些查询?我相信如果我知道如何查询一个问题,那么我将能够解决其他问题。 我将提供任何可能需要的信息来解决这个问题。

  • 在我的DAO类中,假设我有实体管理器'em'是由实体管理器工厂制作的,之后的代码如下所示:- 当我执行上面的代码行时,在堆内存中创建了一个对象,并在其中存储了其实例变量“xyz”的值。 在第3行之后,如我们所知,carEntity对象进入托管状态。它将不会转到数据库,直到我刷新或提交事务。 那么实体管理器如何知道一个实体已经进入托管状态呢?执行后,是否为CarEntity创建了一个新对象?或者它在

  • 如何返回特定日期所在的行号? 类似这样的事情:

  • 我有一个我觉得很神秘的问题。我在Google和StackOverflow上搜索过,没有发现任何人有类似的问题。我尝试将持久化提供程序切换到Hibernate,但我们的代码过于依赖EclipseLink特性,因此无法将其作为调试的实际选项。如果这个问题仍然存在(哈,哈;Java EE双关语),我很可能会为Hibernate重写所有持久性代码,如果可能的话。 我的一个实体被正确持久化到数据库,并且它的

  • 我试图使用一种方法来检查一个数组列表是否包含一个带有属性的对象。 这是我目前拥有的,但我无法让它发挥作用。