In this example you will learn how to update an entity object in JPA. We use the EntityManager.merge()
method to update an entity. This method takes the entity to be saved as the parameter and return the merged entity back as the result.
You can see a simple example to the code snippet below. Here is the main program for running the ArtistDao
class to update the artist data in the database.
package org.kodejava.jpa;
import org.kodejava.jpa.dao.ArtistDao;
import org.kodejava.jpa.dao.impl.ArtistDaoImpl;
import org.kodejava.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);
}
}
The ArtistDao
interface and its implementation ArtistDaoImpl
class definition.
package org.kodejava.jpa.dao;
import org.kodejava.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.kodejava.jpa.dao.impl;
import org.kodejava.jpa.dao.ArtistDao;
import org.kodejava.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 final 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();
}
}
The persitence.xml
file can be found on the following link: persistence.xml
.
Maven Dependencies
<dependencies>
<dependency>
<groupId>javax.persistence</groupId>
<artifactId>javax.persistence-api</artifactId>
<version>2.2</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.6.9.Final</version>
</dependency>
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<version>8.1.0</version>
</dependency>
</dependencies>
Latest posts by Wayan (see all)
- How do I get number of each day for a certain month in Java? - September 8, 2024
- How do I get operating system process information using ProcessHandle? - July 22, 2024
- How do I sum a BigDecimal property of a list of objects using Java Stream API? - July 22, 2024