java jpa发展前景_java – JPA比期望更多的实例

我有一个名为NodeType的类,由SQL Server数据库使用JPA支持.

没有什么特别的,没有关系,只有一些领域.它们甚至更多,但为了简化我省略了它们:

@Entity

@Table(name="node_type")

@NamedQuery(name="NodeType.findAll", query="SELECT n FROM NodeType n")

public class NodeType implements Serializable {

private static final long serialVersionUID = 1L;

@Id

@GeneratedValue(strategy=GenerationType.IDENTITY)

private int id;

private String name;

public NodeType() {

}

public int getId() {

return this.id;

}

public void setId(int id) {

this.id = id;

}

public String getName() {

return this.name;

}

public void setName(String name) {

this.name = name;

}

}

在启动我的应用程序时,我读取它们并将它们全部放入HashMap中,将属性名称作为键以便以后更容易找到它.

在数据库中,目前有五个项目.

id name maxNoExits mandatoryExits defaultExits

== ========= ========== ============== ============

1 NTYPE_HUP 0 NodeHangup

2 NTYPE_ANN 1 NodeAnnounce

3 NTYPE_SLP 1 NodeWait

4 NTYPE_XFR 0 NodeTransfer

5 NTYPE_TBR 32 NodeTimebased

稍后,我不知道究竟发生了什么,每个项目的多个实例突然存在(当前每个项目3个实例)

示例:在应用程序中,我有一个带有值的NodeType实例

1 NTYPE_HUP 0 NodeHangup

eclipse调试器告诉我:

>在我的地图中,实际上有一个项目具有与上述实例相同的值

> map.get为此实例返回null

NodeType类存在> 15个实例

>对于数据库中的每一行,似乎总是存在三个实例.

>比较所有领域,它们似乎是平等的.甚至字符串的id似乎都是相同的.不应该getHash()返回相同而equals()应该返回true然后呢?

最后一点让我感到震惊,因为我没有在我的应用程序中任何地方实现它们!有人知道这发生的时间吗?

如果JPA使用缓存(是吗?),它应该使用@Id列查看以前创建的项目.尽管我正在做多个createQuery,但它们都应该引用相同的项目.还是我错了?

这对我来说都很奇怪,我不知道如何调试它.

我希望有人可以在黑暗中带来一些亮光.

编辑:我可以告诉的是,只要我第一次使用相应的JPA请求,就会存在这15个实例.在构造函数中放置调试器陷阱,我可以确认所有实例是一个接一个地创建的.

Edit2:为了好玩和测试,我只是尝试重新实现hashCode()(简单地返回this.id;)并重写equals()(返回this.id == other.id;)

15个实例仍在那里.因为我只是在阅读,所以我现在不关心它,因为我现在可以将所有这三个实例视为一个相同的项目.但这不是基本问题的解决方案.我怀疑这可能发生在其他地方 – 没有经过测试.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值