1

I have a basic test for an embedded database that I'm trying to get working for a java project. As it stands now I am able to save rows to the database with my entity repository object, and after the app finishes running, I can connect to the database with intellij and see those rows are still there. But then, if I comment out the save methods and run it again, when I check the database after it finishes, the database is empty.

Entity

package closet.utilities.entities; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.Table; @Entity @Table(name = "outfits") public class Outfit { @Id @Column(name = "id") String id; @Column(name = "inv_name") String invName; @Column(name = "display_name") String displayName; @Column(name = "owner") String owner; public Outfit() { } public Outfit(String id, String invName, String displayName, String owner) { this.id = id; this.invName = invName; this.displayName = displayName; this.owner = owner; } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getInvName() { return invName; } public void setInvName(String invName) { this.invName = invName; } public String getDisplayName() { return displayName; } public void setDisplayName(String displayName) { this.displayName = displayName; } public String getOwner() { return owner; } public void setOwner(String owner) { this.owner = owner; } @Override public String toString() { return "Outfit{" + "id='" + id + '\'' + ", invName='" + invName + '\'' + ", displayName='" + displayName + '\'' + ", owner='" + owner + '\'' + '}'; } } 

Repository

package closet.utilities.repositories; import closet.utilities.entities.Outfit; import javax.persistence.EntityManager; import java.util.List; import java.util.Optional; public class OutfitRepository { private EntityManager entityManager; public OutfitRepository(EntityManager entityManager) { this.entityManager = entityManager; } public Optional<Outfit> findById(String id) { Outfit outfit = entityManager.find(Outfit.class, id); return outfit != null ? Optional.of(outfit) : Optional.empty(); } public List<Outfit> findAll() { return entityManager.createQuery("from Outfit").getResultList(); } public Optional<Outfit> save(Outfit outfit) { try { entityManager.getTransaction().begin(); entityManager.persist(outfit); entityManager.getTransaction().commit(); return Optional.of(outfit); } catch (Exception e) { // TODO logging e.printStackTrace(); } return Optional.empty(); } } 

main method

package closet.utilities; import closet.utilities.entities.Outfit; import closet.utilities.repositories.OutfitRepository; import org.hibernate.Session; import org.hibernate.Transaction; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.Persistence; import java.util.List; public class Runnable { public static void main(String[] args) { // Create our entity manager EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("closet"); EntityManager entityManager = entityManagerFactory.createEntityManager(); Outfit outfit = new Outfit("Ramesh", "Fadatare", "[email protected]", ""); Outfit outfit1 = new Outfit("John", "Cena", "[email protected]", ""); OutfitRepository outfitRepository = new OutfitRepository(entityManager); //outfitRepository.save(outfit); //outfitRepository.save(outfit1); List<Outfit> outfits = outfitRepository.findAll(); for (Outfit o : outfits) { System.out.println(o.getInvName()); } } } 

persistence.xml

<persistence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd" version="2.0" xmlns="http://java.sun.com/xml/ns/persistence"> <persistence-unit name="closet" transaction-type="RESOURCE_LOCAL"> <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider> <class>closet.utilities.entities.Outfit</class> <properties> <property name="javax.persistence.jdbc.driver" value="org.h2.Driver" /> <property name="javax.persistence.jdbc.url" value="jdbc:h2:./data/closet" /> <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> 

hibernate.cfg.xml

<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <!-- JDBC Database connection settings --> <property name="connection.driver_class">org.h2.Driver</property> <property name="connection.url">jdbc:h2:./data/closet</property> <property name="connection.username">sa</property> <property name="connection.password"></property> <!-- JDBC connection pool settings ... using built-in test pool --> <property name="connection.pool_size">1</property> <!-- Select our SQL dialect --> <property name="dialect">org.hibernate.dialect.H2Dialect</property> <!-- Echo the SQL to stdout --> <property name="show_sql">true</property> <!-- Set the current session context --> <property name="current_session_context_class">thread</property> <!-- Drop and re-create the database schema on startup --> <property name="hbm2ddl.auto">create-drop</property> <!-- dbcp connection pool configuration --> <property name="hibernate.dbcp.initialSize">5</property> <property name="hibernate.dbcp.maxTotal">20</property> <property name="hibernate.dbcp.maxIdle">10</property> <property name="hibernate.dbcp.minIdle">5</property> <property name="hibernate.dbcp.maxWaitMillis">-1</property> <mapping class="closet.utilities.entities.Outfit" /> </session-factory> </hibernate-configuration> 

I'm just following this tutorial here as a guide to just figure out how to get it all working. I can't see what I'm doing wrong based on that.

1 Answer 1

2

You use:

<property name="hbm2ddl.auto">create-drop</property> 

As it is stated in the documentation:

create-drop

Drop the schema and recreate it on SessionFactory startup. Additionally, drop the schema on SessionFactory shutdown.

So, this is expected behaviour.

Sign up to request clarification or add additional context in comments.

1 Comment

Thank you. I changed it to "none" and it worked.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.