相关疑难解决方法(0)

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万
查看次数

如何获取任何JPA实体的主键?

对于每个@Entity,我需要执行以下操作:

public <Entity> boolean insert(final Entity entity){
    if (em.find(entity.getClass(), entity.getId()) == null) {
        et.begin();
        em.persist(entity);
        et.commit();
        return true;
    }
    return false;
}
Run Code Online (Sandbox Code Playgroud)

如果实体不存在,那就是持久存在,并知道它是否存在.有了实体,我正试图到达@Entity,虽然我意识到这不是继承关系.我可以用什么类来引用每个JPA实体?我可以创建一个接口/抽象类MyEntities并让所有这些继承,但是这样吗?我希望减少代码.此外,当我尝试使用.getId()时,我希望能够提取每个实体的主键.

java eclipselink jpa-2.0

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

解释用Hibernate映射自动递增的复合id序列的行为

我有一张桌子

CREATE TABLE `SomeEntity` (
     `id` int(11) NOT NULL AUTO_INCREMENT,
     `subid` int(11) NOT NULL DEFAULT '0',
     PRIMARY KEY (`id`,`subid`),
Run Code Online (Sandbox Code Playgroud)

我有一个实体类,其中包含一个自动增量字段.我希望在持久化时读取分配给它的自动增量ID

getter上的注释如下

  private long id;
   private int subid;
  @Id
  @GeneratedValue **//How do i correct this to have multiple rows with same id and different subid**
  @Column(name = "id")
  public long getId() {
    return id;
  }

  @Id
  @Column(name = "subid")
  public int getSubid() {
    return subid;
  }
Run Code Online (Sandbox Code Playgroud)

我希望有实体

id 1 subid 0 
id 1 subid 1
id 1 subid 2
id 2 …
Run Code Online (Sandbox Code Playgroud)

java mysql spring hibernate jpa

11
推荐指数
1
解决办法
1655
查看次数

标签 统计

java ×3

jpa ×2

eclipselink ×1

hibernate ×1

jpa-2.0 ×1

mysql ×1

primary-key ×1

spring ×1