相关疑难解决方法(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万
查看次数

EntityManager persist()方法不会将记录插入数据库

我有使用EntityManager.persist(Object)方法的问题.现在当我摆脱其他问题时,通过app工作没有Exception但是对象没有放在我的数据库中.

我的实体类:

@Entity
@Table(name ="Chain")
public class Chain implements Serializable{

@Id
@Column(name = "id")
  private Long id;
@Column(name = "date")
  private Date date;
@Column(name = "name")
  private String name;
//setters and getters
}
Run Code Online (Sandbox Code Playgroud)

我的道教课:

@Transactional
@Repository("ChainDao")
public class ChainDaoImpl implements ChainDao{


    private EntityManager em;


    @PersistenceContext
    public void setEntityManager(EntityManager em) {
        this. em = em;
    }

    public int saveChain(Chain chain) {
        chain.setDate(new Date());
        chain.setId((long)44);
        Boolean a;
        em.persist(chain);

        return 222;
    }
}
Run Code Online (Sandbox Code Playgroud)

我的xml上下文:

<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean" >
    <property name="persistenceXmlLocation" value="classpath*:META-INF/persistence.xml"></property></bean> …
Run Code Online (Sandbox Code Playgroud)

spring hibernate jpa persist

10
推荐指数
2
解决办法
6万
查看次数

标签 统计

jpa ×2

hibernate ×1

java ×1

persist ×1

primary-key ×1

spring ×1