* BAEL-2799

* constructor name fix

* method name fix

* add database

* fix tests
This commit is contained in:
Krzysztof Majewski 2019-05-07 18:34:15 +02:00 committed by maibin
parent d2102a76ff
commit 51a9d7b0d6
6 changed files with 208 additions and 172 deletions

View File

@ -1,4 +1,4 @@
package com.baeldung.jpadefaultvalues.application; package com.baeldung.jpa.defaultvalues;
import javax.persistence.Column; import javax.persistence.Column;
import javax.persistence.Entity; import javax.persistence.Entity;
@ -9,7 +9,6 @@ import javax.persistence.Id;
public class User { public class User {
@Id @Id
@GeneratedValue
private Long id; private Long id;
@Column(columnDefinition = "varchar(255) default 'John Snow'") @Column(columnDefinition = "varchar(255) default 'John Snow'")

View File

@ -0,0 +1,36 @@
package com.baeldung.jpa.defaultvalues;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
public class UserRepository {
private EntityManagerFactory emf = null;
public UserRepository() {
emf = Persistence.createEntityManagerFactory("entity-default-values");
}
public User find(Long id) {
EntityManager entityManager = emf.createEntityManager();
User user = entityManager.find(User.class, id);
entityManager.close();
return user;
}
public void save(User user, Long id) {
user.setId(id);
EntityManager entityManager = emf.createEntityManager();
entityManager.getTransaction().begin();
entityManager.persist(user);
entityManager.getTransaction().commit();
entityManager.close();
}
public void clean() {
emf.close();
}
}

View File

@ -1,133 +1,149 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence" <persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence
http://xmlns.jcp.org/xml/ns/persistence/persistence_2_2.xsd" http://xmlns.jcp.org/xml/ns/persistence/persistence_2_2.xsd"
version="2.2"> version="2.2">
<persistence-unit name="java-jpa-scheduled-day"> <persistence-unit name="java-jpa-scheduled-day">
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider> <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
<class>com.baeldung.sqlresultsetmapping.ScheduledDay</class> <class>com.baeldung.sqlresultsetmapping.ScheduledDay</class>
<class>com.baeldung.sqlresultsetmapping.Employee</class> <class>com.baeldung.sqlresultsetmapping.Employee</class>
<exclude-unlisted-classes>true</exclude-unlisted-classes> <exclude-unlisted-classes>true</exclude-unlisted-classes>
<properties> <properties>
<property name="javax.persistence.jdbc.driver" value="org.h2.Driver"/> <property name="javax.persistence.jdbc.driver" value="org.h2.Driver"/>
<property name="javax.persistence.jdbc.url" <property name="javax.persistence.jdbc.url"
value="jdbc:h2:mem:test;INIT=RUNSCRIPT FROM 'classpath:database.sql'"/> value="jdbc:h2:mem:test;INIT=RUNSCRIPT FROM 'classpath:database.sql'"/>
<property name="javax.persistence.jdbc.user" value="sa"/> <property name="javax.persistence.jdbc.user" value="sa"/>
<property name="javax.persistence.jdbc.password" value=""/> <property name="javax.persistence.jdbc.password" value=""/>
<property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect"/> <property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect"/>
<!--<property name="hibernate.hbm2ddl.auto" value="create-drop" />--> <!--<property name="hibernate.hbm2ddl.auto" value="create-drop" />-->
<property name="show_sql" value="true"/> <property name="show_sql" value="true"/>
<property name="hibernate.temp.use_jdbc_metadata_defaults" value="false"/> <property name="hibernate.temp.use_jdbc_metadata_defaults" value="false"/>
</properties> </properties>
</persistence-unit> </persistence-unit>
<persistence-unit name="jpa-h2"> <persistence-unit name="jpa-h2">
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider> <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
<class>com.baeldung.jpa.stringcast.Message</class> <class>com.baeldung.jpa.stringcast.Message</class>
<exclude-unlisted-classes>true</exclude-unlisted-classes> <exclude-unlisted-classes>true</exclude-unlisted-classes>
<properties> <properties>
<property name="javax.persistence.jdbc.driver" value="org.h2.Driver"/> <property name="javax.persistence.jdbc.driver" value="org.h2.Driver"/>
<property name="javax.persistence.jdbc.url" value="jdbc:h2:mem:test"/> <property name="javax.persistence.jdbc.url" value="jdbc:h2:mem:test"/>
<property name="javax.persistence.jdbc.user" value="sa"/> <property name="javax.persistence.jdbc.user" value="sa"/>
<property name="javax.persistence.jdbc.password" value=""/> <property name="javax.persistence.jdbc.password" value=""/>
<property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect"/> <property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect"/>
<property name="hibernate.hbm2ddl.auto" value="create-drop"/> <property name="hibernate.hbm2ddl.auto" value="create-drop"/>
<property name="show_sql" value="true"/> <property name="show_sql" value="true"/>
<property name="hibernate.temp.use_jdbc_metadata_defaults" value="false"/> <property name="hibernate.temp.use_jdbc_metadata_defaults" value="false"/>
</properties> </properties>
</persistence-unit> </persistence-unit>
<persistence-unit name="jpa-db"> <persistence-unit name="jpa-db">
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider> <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
<class>com.baeldung.jpa.model.Car</class> <class>com.baeldung.jpa.model.Car</class>
<exclude-unlisted-classes>true</exclude-unlisted-classes> <exclude-unlisted-classes>true</exclude-unlisted-classes>
<properties> <properties>
<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/> <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
<property name="javax.persistence.jdbc.url" value="jdbc:mysql://127.0.0.1:3306/baeldung"/> <property name="javax.persistence.jdbc.url" value="jdbc:mysql://127.0.0.1:3306/baeldung"/>
<property name="javax.persistence.jdbc.user" value="baeldung"/> <property name="javax.persistence.jdbc.user" value="baeldung"/>
<property name="javax.persistence.jdbc.password" value="YourPassword"/> <property name="javax.persistence.jdbc.password" value="YourPassword"/>
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/> <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/>
<property name="hibernate.show_sql" value="true"/> <property name="hibernate.show_sql" value="true"/>
</properties> </properties>
</persistence-unit> </persistence-unit>
<persistence-unit name="entity-graph-pu" transaction-type="RESOURCE_LOCAL"> <persistence-unit name="entity-graph-pu" transaction-type="RESOURCE_LOCAL">
<class>com.baeldung.jpa.entitygraph.model.Post</class> <class>com.baeldung.jpa.entitygraph.model.Post</class>
<class>com.baeldung.jpa.entitygraph.model.User</class> <class>com.baeldung.jpa.entitygraph.model.User</class>
<class>com.baeldung.jpa.entitygraph.model.Comment</class> <class>com.baeldung.jpa.entitygraph.model.Comment</class>
<exclude-unlisted-classes>true</exclude-unlisted-classes> <exclude-unlisted-classes>true</exclude-unlisted-classes>
<properties> <properties>
<!--H2--> <!--H2-->
<property name="javax.persistence.jdbc.driver" value="org.h2.Driver"/> <property name="javax.persistence.jdbc.driver" value="org.h2.Driver"/>
<property name="javax.persistence.jdbc.url" <property name="javax.persistence.jdbc.url"
value="jdbc:h2:mem:entitygraphdb;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE"/> value="jdbc:h2:mem:entitygraphdb;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE"/>
<property name="javax.persistence.schema-generation.database.action" value="drop-and-create"/> <property name="javax.persistence.schema-generation.database.action" value="drop-and-create"/>
<property name="javax.persistence.sql-load-script-source" value="data-init.sql"/> <property name="javax.persistence.sql-load-script-source" value="data-init.sql"/>
</properties> </properties>
</persistence-unit> </persistence-unit>
<persistence-unit name="java8-datetime-postgresql" transaction-type="RESOURCE_LOCAL"> <persistence-unit name="java8-datetime-postgresql" transaction-type="RESOURCE_LOCAL">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider> <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<class>com.baeldung.jpa.datetime.JPA22DateTimeEntity</class> <class>com.baeldung.jpa.datetime.JPA22DateTimeEntity</class>
<exclude-unlisted-classes>true</exclude-unlisted-classes> <exclude-unlisted-classes>true</exclude-unlisted-classes>
<properties> <properties>
<property name="javax.persistence.jdbc.driver" value="org.postgresql.Driver"/> <property name="javax.persistence.jdbc.driver" value="org.postgresql.Driver"/>
<property name="javax.persistence.jdbc.url" value="jdbc:postgresql://localhost:5432/java8-datetime2"/> <property name="javax.persistence.jdbc.url" value="jdbc:postgresql://localhost:5432/java8-datetime2"/>
<property name="javax.persistence.jdbc.user" value="postgres"/> <property name="javax.persistence.jdbc.user" value="postgres"/>
<property name="javax.persistence.jdbc.password" value="postgres"/> <property name="javax.persistence.jdbc.password" value="postgres"/>
<property name="javax.persistence.schema-generation.database.action" value="drop-and-create"/> <property name="javax.persistence.schema-generation.database.action" value="drop-and-create"/>
<!-- configure logging --> <!-- configure logging -->
<property name="eclipselink.logging.level" value="INFO"/> <property name="eclipselink.logging.level" value="INFO"/>
<property name="eclipselink.logging.level.sql" value="FINE"/> <property name="eclipselink.logging.level.sql" value="FINE"/>
<property name="eclipselink.logging.parameters" value="true"/> <property name="eclipselink.logging.parameters" value="true"/>
</properties> </properties>
</persistence-unit> </persistence-unit>
<persistence-unit name="jpa-h2-criteria"> <persistence-unit name="jpa-h2-criteria">
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider> <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
<class>com.baeldung.jpa.criteria.entity.Item</class> <class>com.baeldung.jpa.criteria.entity.Item</class>
<exclude-unlisted-classes>true</exclude-unlisted-classes> <exclude-unlisted-classes>true</exclude-unlisted-classes>
<properties> <properties>
<property name="javax.persistence.jdbc.driver" <property name="javax.persistence.jdbc.driver"
value="org.h2.Driver" /> value="org.h2.Driver" />
<property name="javax.persistence.jdbc.url" <property name="javax.persistence.jdbc.url"
value="jdbc:h2:mem:test" /> value="jdbc:h2:mem:test" />
<property name="javax.persistence.jdbc.user" value="sa" /> <property name="javax.persistence.jdbc.user" value="sa" />
<property name="javax.persistence.jdbc.password" value="" /> <property name="javax.persistence.jdbc.password" value="" />
<property name="hibernate.dialect" <property name="hibernate.dialect"
value="org.hibernate.dialect.H2Dialect" /> value="org.hibernate.dialect.H2Dialect" />
<property name="hibernate.hbm2ddl.auto" value="create-drop" /> <property name="hibernate.hbm2ddl.auto" value="create-drop" />
<property name="show_sql" value="true" /> <property name="show_sql" value="true" />
<property name="hibernate.temp.use_jdbc_metadata_defaults" <property name="hibernate.temp.use_jdbc_metadata_defaults"
value="false" /> value="false" />
<property name="javax.persistence.sql-load-script-source" value="item.sql"/> <property name="javax.persistence.sql-load-script-source" value="item.sql"/>
</properties> </properties>
</persistence-unit> </persistence-unit>
<persistence-unit name="jpa-query-types"> <persistence-unit name="jpa-query-types">
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider> <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
<class>com.baeldung.jpa.querytypes.UserEntity</class> <class>com.baeldung.jpa.querytypes.UserEntity</class>
<exclude-unlisted-classes>true</exclude-unlisted-classes> <exclude-unlisted-classes>true</exclude-unlisted-classes>
<properties> <properties>
<property name="javax.persistence.jdbc.driver" <property name="javax.persistence.jdbc.driver"
value="org.h2.Driver" /> value="org.h2.Driver" />
<property name="javax.persistence.jdbc.url" <property name="javax.persistence.jdbc.url"
value="jdbc:h2:mem:test" /> value="jdbc:h2:mem:test" />
<property name="javax.persistence.jdbc.user" value="sa" /> <property name="javax.persistence.jdbc.user" value="sa" />
<property name="javax.persistence.jdbc.password" value="" /> <property name="javax.persistence.jdbc.password" value="" />
<property name="hibernate.dialect" <property name="hibernate.dialect"
value="org.hibernate.dialect.H2Dialect" /> value="org.hibernate.dialect.H2Dialect" />
<property name="hibernate.hbm2ddl.auto" value="create-drop" /> <property name="hibernate.hbm2ddl.auto" value="create-drop" />
<property name="show_sql" value="true" /> <property name="show_sql" value="true" />
<property name="hibernate.temp.use_jdbc_metadata_defaults" <property name="hibernate.temp.use_jdbc_metadata_defaults"
value="false" /> value="false" />
<property name="javax.persistence.sql-load-script-source" value="users.sql"/> <property name="javax.persistence.sql-load-script-source" value="users.sql"/>
</properties> </properties>
</persistence-unit> </persistence-unit>
</persistence> <persistence-unit name="entity-default-values">
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
<class>com.baeldung.jpa.defaultvalues.User</class>
<exclude-unlisted-classes>true</exclude-unlisted-classes>
<properties>
<property name="javax.persistence.jdbc.driver" value="org.h2.Driver" />
<property name="javax.persistence.jdbc.url" value="jdbc:h2:mem:test" />
<property name="javax.persistence.jdbc.user" value="sa" />
<property name="javax.persistence.jdbc.password" value="" />
<property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect" />
<property name="hibernate.hbm2ddl.auto" value="create-drop" />
<property name="show_sql" value="true" />
<property name="hibernate.temp.use_jdbc_metadata_defaults" value="false" />
</properties>
</persistence-unit>
</persistence>

View File

@ -1,31 +1,31 @@
package com.baeldung.jpadefaultvalues.application; package com.baeldung.jpa.defaultvalues;
import com.baeldung.jpadefaultvalues.application.User; import com.baeldung.jpa.defaultvalues.User;
import com.baeldung.jpadefaultvalues.application.UserRepository; import com.baeldung.jpa.defaultvalues.UserRepository;
import org.junit.Test; import org.junit.Test;
import org.junit.Ignore; import org.junit.Ignore;
import org.junit.runner.RunWith; import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.beans.factory.annotation.Autowired;
import static org.junit.Assert.*; import static org.junit.Assert.*;
@RunWith(SpringRunner.class)
@SpringBootTest
public class UserDefaultValuesUnitTest { public class UserDefaultValuesUnitTest {
@Autowired private static UserRepository userRepository = null;
private UserRepository userRepository;
@BeforeClass
public static void once() {
userRepository = new UserRepository();
}
@Test @Test
@Ignore // SQL default values are also defined @Ignore // SQL default values are also defined
public void saveUser_shouldSaveWithDefaultFieldValues() { public void saveUser_shouldSaveWithDefaultFieldValues() {
User user = new User(); User user = new User();
user = userRepository.save(user); userRepository.save(user, 1L);
user = userRepository.find(1L);
assertEquals(user.getName(), "John Snow"); assertEquals(user.getName(), "John Snow");
assertEquals(25, (int) user.getAge()); assertEquals(25, (int) user.getAge());
assertFalse(user.getLocked()); assertFalse(user.getLocked());
@ -36,8 +36,9 @@ public class UserDefaultValuesUnitTest {
public void saveUser_shouldSaveWithNullName() { public void saveUser_shouldSaveWithNullName() {
User user = new User(); User user = new User();
user.setName(null); user.setName(null);
user = userRepository.save(user); userRepository.save(user, 2L);
user = userRepository.find(2L);
assertNull(user.getName()); assertNull(user.getName());
assertEquals(25, (int) user.getAge()); assertEquals(25, (int) user.getAge());
assertFalse(user.getLocked()); assertFalse(user.getLocked());
@ -46,11 +47,17 @@ public class UserDefaultValuesUnitTest {
@Test @Test
public void saveUser_shouldSaveWithDefaultSqlValues() { public void saveUser_shouldSaveWithDefaultSqlValues() {
User user = new User(); User user = new User();
user = userRepository.save(user); userRepository.save(user, 3L);
user = userRepository.find(3L);
assertEquals(user.getName(), "John Snow"); assertEquals(user.getName(), "John Snow");
assertEquals(25, (int) user.getAge()); assertEquals(25, (int) user.getAge());
assertFalse(user.getLocked()); assertFalse(user.getLocked());
} }
@AfterClass
public static void destroy() {
userRepository.clean();
}
} }

View File

@ -1,14 +0,0 @@
package com.baeldung.jpadefaultvalues.application;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ApplicationContext;
@SpringBootApplication
public class Application {
private static ApplicationContext applicationContext;
public static void main(String[] args) {
applicationContext = SpringApplication.run(Application.class, args);
}
}

View File

@ -1,8 +0,0 @@
package com.baeldung.jpadefaultvalues.application;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface UserRepository extends JpaRepository<User, Long> {
}