Tables are not generated in database even when i set attribute javax.persistence.schema-generation.database.action
to create
and connection string javax.persistence.jdbc.url
to jdbc:derby:db;create=true
persistence.xml:
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.2"
xmlns="http://xmlns.jcp.org/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence https://www.oracle.com/webfolder/technetwork/jsc/xml/ns/persistence/persistence_2_2.xsd">
<persistence-unit name="DataLayer"
transaction-type="RESOURCE_LOCAL">
<non-jta-data-source>DataSource</non-jta-data-source>
<properties>
<property
name="javax.persistence.schema-generation.database.action"
value="create" />
<property name="javax.persistence.jdbc.driver"
value="org.apache.derby.jdbc.EmbeddedDriver" />
<property name="javax.persistence.jdbc.url"
value="jdbc:derby:db;create=true" />
</properties>
</persistence-unit>
</persistence>
my testing method:
HashMap<String, String> jpaProps = new HashMap<String, String>();
jpaProps.put("javax.persistence.jdbc.url", "jdbc:derby:db;create=true");
jpaProps.put("javax.persistence.jdbc.driver", "org.apache.derby.jdbc.EmbeddedDriver");
jpaProps.put("javax.persistence.schema-generation.database.action", "create");
EntityManagerFactory factory = Persistence.createEntityManagerFactory("DataLayer", jpaProps);
EntityManager manager = factory.createEntityManager();
EntityPerson person = new EntityPerson();
person.setAge(25);
person.setName("Michael Pear");
manager.getTransaction().begin();
manager.persist(person);
manager.getTransaction().commit(); //<- Exception here saying EntityPerson Table does not exist.
As you can see, I also tried to override properties by supplying them to createEntityManagerFactory
method.
My EntityPerson class:
@Entity
public class EntityPerson
{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
@Column(nullable = false)
private String name;
private int age;
... getters and setters
}
Also tried excplicitly define Table name and Entity name with annotations:
@Entity(name = "EntityPerson")
@Table(name = "EntityPerson")
How to generate tables in db by annotated classes by startup of a program (during runtime)?
Java EE can discover entities automatically, but as i am building desktop application aka. using Java SE, i needed to mention entities in persistence-unit in persistence.xml file like so:
<class>entities.EntityPerson</class>