Java如何获取任何JPA实体的主键?
如果要获取任何JPA实体对象的主键,则可以使用PersistenceUnitUtil.getIdentifier()方法。此方法采用单个参数,该参数是要读取其标识符的实体对象。该PersistenceUnitUtil实例可以从被访问EntityManagerFactory的对象。
如果实体对象包含标识符,则该getIdentifier()方法将以形式返回该标识符java.lang.Object。如果实体对象没有标识符,它将返回null。
package org.nhooo.example.jpa;
import org.nhooo.example.jpa.entity.Artist;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
public class GetEntityIdDemo {
public static final String PERSISTENCE_UNIT_NAME = "music";
public static void main(String[] args) {
EntityManagerFactory factory =
Persistence.createEntityManagerFactory(PERSISTENCE_UNIT_NAME);
EntityManager manager = factory.createEntityManager();
//获取存在实体的对象标识符。
Artist artist = manager.find(Artist.class, 1L);
if (artist != null) {
Object identifier =
factory.getPersistenceUnitUtil().getIdentifier(artist);
System.out.println("Identifier = " + identifier);
}
//获取新插入实体的对象标识符。
Artist newArtist = new Artist();
newArtist.setName("Bon Jovi");
manager.getTransaction().begin();
manager.persist(newArtist);
manager.getTransaction().commit();
Object identifier =
factory.getPersistenceUnitUtil().getIdentifier(newArtist);
System.out.println("Identifier = " + identifier);
}
}Maven依赖
<dependencies>
<!-- https://search.maven.org/remotecontent?filepath=javax/persistence/javax.persistence-api/2.2/javax.persistence-api-2.2.jar -->
<dependency>
<groupId>javax.persistence</groupId>
<artifactId>javax.persistence-api</artifactId>
<version>2.2</version>
</dependency>
<!-- https://search.maven.org/remotecontent?filepath=org/hibernate/hibernate-core/5.4.1.Final/hibernate-core-5.4.1.Final.jar -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.4.1.Final</version>
</dependency>
<!-- https://search.maven.org/remotecontent?filepath=mysql/mysql-connector-java/5.1.47/mysql-connector-java-5.1.47.jar -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
</dependencies>