Java如何使用JPA更新实体对象?
在此示例中,您将学习如何在JPA中更新实体对象。我们使用该EntityManager.merge()方法来更新实体。此方法将要保存的实体作为参数,然后将合并的实体作为结果返回。
您可以在下面的代码片段中看到一个简单的示例。这是用于运行ArtistDao类以更新数据库中的艺术家数据的主程序。
package org.nhooo.example.jpa;
import org.nhooo.example.jpa.dao.ArtistDao;
import org.nhooo.example.jpa.dao.impl.ArtistDaoImpl;
import org.nhooo.example.jpa.entity.Artist;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
public class EntityUpdateDemo {
public static final String PERSISTENCE_UNIT_NAME = "music";
public static void main(String[] args) {
EntityManagerFactory factory =
Persistence.createEntityManagerFactory(PERSISTENCE_UNIT_NAME);
EntityManager em = factory.createEntityManager();
ArtistDao dao = new ArtistDaoImpl(em);
Artist artist = dao.findById(1L);
System.out.println("Artist = " + artist);
artist.setName("Bon Jovi");
dao.update(artist);
artist = dao.findById(artist.getId());
System.out.println("Artist = " + artist);
}
}该ArtistDao接口及其实现ArtistDaoImpl类的定义。
package org.nhooo.example.jpa.dao;
import org.nhooo.example.jpa.entity.Artist;
import java.util.List;
public interface ArtistDao {
Artist findById(Long id);
void save(Artist artist);
void update(Artist artist);
List<Artist> getArtists();
}package org.nhooo.example.jpa.dao.impl;
import org.nhooo.example.jpa.dao.ArtistDao;
import org.nhooo.example.jpa.entity.Artist;
import javax.persistence.EntityManager;
import javax.persistence.EntityNotFoundException;
import javax.persistence.Query;
import java.util.List;
public class ArtistDaoImpl implements ArtistDao {
private EntityManager manager;
public ArtistDaoImpl(EntityManager manager) {
this.manager = manager;
}
/**
* Find Artist based on the entity Id.
*
* @param artistId the artist Id.
* @return Artist.
* @throws EntityNotFoundException when no artist is found.
*/
public Artist findById(Long artistId) {
Artist artist = manager.find(Artist.class, artistId);
if (artist == null) {
throw new EntityNotFoundException("Can't find Artist for ID "
+ artistId);
}
return artist;
}
@Override
public void save(Artist artist) {
manager.getTransaction().begin();
manager.persist(artist);
manager.getTransaction().commit();
}
/**
* Update Artist information.
*
* @param artist an Artist to be updated.
*/
@Override
public void update(Artist artist) {
manager.getTransaction().begin();
manager.merge(artist);
manager.getTransaction().commit();
}
@Override
@SuppressWarnings(value = "unchecked")
public List<Artist> getArtists() {
Query query = manager.createQuery("select a from Artist a", Artist.class);
return query.getResultList();
}
}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>