相关疑难解决方法(0)

使用JPA和Hibernate时应该如何实现equals和hashcode

应该如何在Hibernate中实现模型类的equals和hashcode?常见的陷阱是什么?对于大多数情况,默认实现是否足够好?使用商业密钥有什么意义吗?

在我看来,当考虑到懒惰的提取,id生成,代理等时,很难在任何情况下都能正常工作.

java orm hibernate equals hashcode

93
推荐指数
5
解决办法
5万
查看次数

JPA何时设置@GeneratedValue @Id

我有一个简单的JPA实体,它使用生成的long"ID"作为其主键:

@Entity
public class Player {
   private long id;

   protected Player() {
     // Do nothing; id defaults to 0L
   }


   @GeneratedValue
   @Id
   public long getId() {
      return id;
   }

   protected void setId(final long id) {
      this.id = id;
   }
   // Other code
}
Run Code Online (Sandbox Code Playgroud)

在此类对象的生命周期中的某个时刻,JPA必须调用setId()以记录生成的ID值.我的问题是,这是什么时候发生的,以及说明这一点的文档在哪里.我查看了JPA规范,但找不到明确的声明.

JPA规范说(重点补充):

托管实体实例是具有持久标识的实例,该标识当前与持久性上下文相关联.

这是否试图说必须管理对象具有@Id重要意义?说明EntityManager.persist()(强调添加)的文档使"实例管理和持久",这是否意味着@Id由该方法设置?或者直到你打电话EntityTransaction.commit()

@Id设置可能是不同的JPA提供商不同,也许不同的生成策略.但是,最安全(可移植,符合规范)的假设是什么,你可以在生命周期的最早点设置它?

java jpa primary-key

44
推荐指数
3
解决办法
4万
查看次数

如何使用两个数字作为Map键

我有两个号码,我想将它们一起用作一个键Map.目前,我正在连接他们的字符串表示.例如,假设密钥号是4和12.我使用:

String key = 4 + "," + 12;
Run Code Online (Sandbox Code Playgroud)

地图声明为Map<String, Object>.

我觉得这太糟了!我喜欢用别的东西String作为钥匙!我想要以最快的方式创建这些密钥.

谁有个好主意?

java collections performance key data-structures

9
推荐指数
4
解决办法
2万
查看次数