Initial Commit (#4427)
This commit is contained in:
parent
df85f99c98
commit
eeb7d1c68e
@ -0,0 +1,34 @@
|
|||||||
|
package com.baeldung.hibernate.jpabootstrap.application;
|
||||||
|
|
||||||
|
import com.baeldung.hibernate.jpabootstrap.config.JpaEntityManagerFactory;
|
||||||
|
import com.baeldung.hibernate.jpabootstrap.entities.User;
|
||||||
|
import javax.persistence.EntityManager;
|
||||||
|
|
||||||
|
public class Application {
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
EntityManager entityManager = getJpaEntityManager();
|
||||||
|
User user = entityManager.find(User.class, 1);
|
||||||
|
System.out.println(user);
|
||||||
|
entityManager.getTransaction().begin();
|
||||||
|
user.setName("John");
|
||||||
|
user.setEmail("john@domain.com");
|
||||||
|
entityManager.merge(user);
|
||||||
|
entityManager.getTransaction().commit();
|
||||||
|
entityManager.getTransaction().begin();
|
||||||
|
entityManager.persist(new User("Monica", "monica@domain.com"));
|
||||||
|
entityManager.getTransaction().commit();
|
||||||
|
|
||||||
|
// additional CRUD operations
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private static class EntityManagerHolder {
|
||||||
|
private static final EntityManager ENTITY_MANAGER = new JpaEntityManagerFactory(
|
||||||
|
new Class[]{User.class}).getEntityManager();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static EntityManager getJpaEntityManager() {
|
||||||
|
return EntityManagerHolder.ENTITY_MANAGER;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,131 @@
|
|||||||
|
package com.baeldung.hibernate.jpabootstrap.config;
|
||||||
|
|
||||||
|
import java.net.URL;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Properties;
|
||||||
|
import javax.sql.DataSource;
|
||||||
|
import javax.persistence.SharedCacheMode;
|
||||||
|
import javax.persistence.ValidationMode;
|
||||||
|
import javax.persistence.spi.ClassTransformer;
|
||||||
|
import javax.persistence.spi.PersistenceUnitInfo;
|
||||||
|
import javax.persistence.spi.PersistenceUnitTransactionType;
|
||||||
|
import org.hibernate.jpa.HibernatePersistenceProvider;
|
||||||
|
|
||||||
|
public class HibernatePersistenceUnitInfo implements PersistenceUnitInfo {
|
||||||
|
|
||||||
|
public static final String JPA_VERSION = "2.1";
|
||||||
|
private final String persistenceUnitName;
|
||||||
|
private PersistenceUnitTransactionType transactionType = PersistenceUnitTransactionType.RESOURCE_LOCAL;
|
||||||
|
private final List<String> managedClassNames;
|
||||||
|
private final List<String> mappingFileNames = new ArrayList<>();
|
||||||
|
private final Properties properties;
|
||||||
|
private DataSource jtaDataSource;
|
||||||
|
private DataSource nonjtaDataSource;
|
||||||
|
private final List<ClassTransformer> transformers = new ArrayList<>();
|
||||||
|
|
||||||
|
public HibernatePersistenceUnitInfo(String persistenceUnitName, List<String> managedClassNames, Properties properties) {
|
||||||
|
this.persistenceUnitName = persistenceUnitName;
|
||||||
|
this.managedClassNames = managedClassNames;
|
||||||
|
this.properties = properties;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getPersistenceUnitName() {
|
||||||
|
return persistenceUnitName;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getPersistenceProviderClassName() {
|
||||||
|
return HibernatePersistenceProvider.class.getName();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public PersistenceUnitTransactionType getTransactionType() {
|
||||||
|
return transactionType;
|
||||||
|
}
|
||||||
|
|
||||||
|
public HibernatePersistenceUnitInfo setJtaDataSource(DataSource jtaDataSource) {
|
||||||
|
this.jtaDataSource = jtaDataSource;
|
||||||
|
this.nonjtaDataSource = null;
|
||||||
|
transactionType = PersistenceUnitTransactionType.JTA;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public DataSource getJtaDataSource() {
|
||||||
|
return jtaDataSource;
|
||||||
|
}
|
||||||
|
|
||||||
|
public HibernatePersistenceUnitInfo setNonJtaDataSource(DataSource nonJtaDataSource) {
|
||||||
|
this.nonjtaDataSource = nonJtaDataSource;
|
||||||
|
this.jtaDataSource = null;
|
||||||
|
transactionType = PersistenceUnitTransactionType.RESOURCE_LOCAL;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public DataSource getNonJtaDataSource() {
|
||||||
|
return nonjtaDataSource;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<String> getMappingFileNames() {
|
||||||
|
return mappingFileNames;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<URL> getJarFileUrls() {
|
||||||
|
return Collections.emptyList();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public URL getPersistenceUnitRootUrl() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<String> getManagedClassNames() {
|
||||||
|
return managedClassNames;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean excludeUnlistedClasses() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public SharedCacheMode getSharedCacheMode() {
|
||||||
|
return SharedCacheMode.UNSPECIFIED;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ValidationMode getValidationMode() {
|
||||||
|
return ValidationMode.AUTO;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Properties getProperties() {
|
||||||
|
return properties;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getPersistenceXMLSchemaVersion() {
|
||||||
|
return JPA_VERSION;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ClassLoader getClassLoader() {
|
||||||
|
return Thread.currentThread().getContextClassLoader();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void addTransformer(ClassTransformer transformer) {
|
||||||
|
transformers.add(transformer);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ClassLoader getNewTempClassLoader() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,69 @@
|
|||||||
|
package com.baeldung.hibernate.jpabootstrap.config;
|
||||||
|
|
||||||
|
import com.mysql.cj.jdbc.MysqlDataSource;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Properties;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
import javax.persistence.EntityManager;
|
||||||
|
import javax.sql.DataSource;
|
||||||
|
import javax.persistence.EntityManagerFactory;
|
||||||
|
import javax.persistence.spi.PersistenceUnitInfo;
|
||||||
|
import org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl;
|
||||||
|
import org.hibernate.jpa.boot.internal.PersistenceUnitInfoDescriptor;
|
||||||
|
|
||||||
|
public class JpaEntityManagerFactory {
|
||||||
|
|
||||||
|
private final String DB_URL = "jdbc:mysql://databaseurl";
|
||||||
|
private final String DB_USER_NAME = "username";
|
||||||
|
private final String DB_PASSWORD = "password";
|
||||||
|
private final Class[] entityClasses;
|
||||||
|
|
||||||
|
public JpaEntityManagerFactory(Class[] entityClasses) {
|
||||||
|
this.entityClasses = entityClasses;
|
||||||
|
}
|
||||||
|
|
||||||
|
public EntityManager getEntityManager() {
|
||||||
|
return getEntityManagerFactory().createEntityManager();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected EntityManagerFactory getEntityManagerFactory() {
|
||||||
|
PersistenceUnitInfo persistenceUnitInfo = getPersistenceUnitInfo(getClass().getSimpleName());
|
||||||
|
Map<String, Object> configuration = new HashMap<>();
|
||||||
|
return new EntityManagerFactoryBuilderImpl(new PersistenceUnitInfoDescriptor(persistenceUnitInfo), configuration)
|
||||||
|
.build();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected HibernatePersistenceUnitInfo getPersistenceUnitInfo(String name) {
|
||||||
|
return new HibernatePersistenceUnitInfo(name, getEntityClassNames(), getProperties());
|
||||||
|
}
|
||||||
|
|
||||||
|
protected List<String> getEntityClassNames() {
|
||||||
|
return Arrays.asList(getEntities())
|
||||||
|
.stream()
|
||||||
|
.map(Class::getName)
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
}
|
||||||
|
|
||||||
|
protected Properties getProperties() {
|
||||||
|
Properties properties = new Properties();
|
||||||
|
properties.put("hibernate.dialect", "org.hibernate.dialect.MySQLDialect");
|
||||||
|
properties.put("hibernate.id.new_generator_mappings", false);
|
||||||
|
properties.put("hibernate.connection.datasource", getMysqlDataSource());
|
||||||
|
return properties;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected Class[] getEntities() {
|
||||||
|
return entityClasses;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected DataSource getMysqlDataSource() {
|
||||||
|
MysqlDataSource mysqlDataSource = new MysqlDataSource();
|
||||||
|
mysqlDataSource.setURL(DB_URL);
|
||||||
|
mysqlDataSource.setUser(DB_USER_NAME);
|
||||||
|
mysqlDataSource.setPassword(DB_PASSWORD);
|
||||||
|
return mysqlDataSource;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,45 @@
|
|||||||
|
package com.baeldung.hibernate.jpabootstrap.entities;
|
||||||
|
|
||||||
|
import javax.persistence.Entity;
|
||||||
|
import javax.persistence.GeneratedValue;
|
||||||
|
import javax.persistence.GenerationType;
|
||||||
|
import javax.persistence.Id;
|
||||||
|
import javax.persistence.Table;
|
||||||
|
|
||||||
|
@Entity
|
||||||
|
@Table(name = "users")
|
||||||
|
public class User {
|
||||||
|
|
||||||
|
@Id
|
||||||
|
@GeneratedValue(strategy = GenerationType.AUTO)
|
||||||
|
private long id;
|
||||||
|
private String name;
|
||||||
|
private String email;
|
||||||
|
|
||||||
|
public User(){}
|
||||||
|
|
||||||
|
public User(String name, String email) {
|
||||||
|
this.name = name;
|
||||||
|
this.email = email;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setName(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setEmail(String email) {
|
||||||
|
this.email = email;
|
||||||
|
}
|
||||||
|
|
||||||
|
public long getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getEmail() {
|
||||||
|
return email;
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user