I\'m playing around with some JPA stuff, changing the mappings to see how they\'re supposed to be etc. It\'s basic experimentation. However I can\'t find a tool that will si
DataNucleus has its own SchemaTool capable of generating the schema for you, or generating the required DDL statements for you to adapt and apply yourself.
--Andy (DataNucleus)
Try adding the following to your persistence.xml
For Hibernate:
To create:
<property name="hibernate.hbm2ddl.auto" value="update"/>
To drop and create:
<property name="hibernate.hbm2ddl.auto" value="create-drop"/>
For Toplink:
To create:
<property name="toplink.ddl-generation" value="create-tables"/>
To drop and create:
<property name="toplink.ddl-generation" value="drop-and-create-tables"/>
For EclipseLink:
To create:
<property name="eclipselink.ddl-generation" value="create-tables"/>
To drop and create:
<property name="eclipselink.ddl-generation" value="drop-and-create-tables"/>
Antonio Goncalves says in his blog about API to generate the schema.
In JPA 2.1 generateSchema method was introduced for this purpose.
Example from blog:
public class Main {
public static void main(String[] args) {
Persistence.generateSchema("samplePU", null);
}
}
Adding to the list of James McMahon:
For OpenJPA:
<property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema(ForeignKeys=true)"/>
I don't think there is an universal way of doing this with JPA, you have to directly use the underlying JPA implementation to achieve this.
For Hibernate, there are several possibilities:
hbm2ddl
automatically.For EclipseLink (formerly Oracle TopLink, the JPA 2.0 RI) see Using EclipseLink JPA Extensions for Schema Generation. In principle it is very similar to Hibernate, although at first glance I don't see anything that could be used as a stand-alone utility for creating a DB script.
Other JPA implementations (BEA/Oracle Kodo, Apache OpenJPA) probably have their own specific methods of achieving this.
I use Hibernate's org.hibernate.tool.hbm2ddl.SchemaExport
class and this small method to
generate the schema in the database:
public static void rebuildSchema()
{
configuration = new Configuration();
configuration.configure();
new SchemaExport(configuration)
.setHaltOnError(true)
.execute(false, true, false, false);
}
to create the DDL in an external file, use this call to execute
.
new SchemaExport(configuration)
.setHaltOnError(true)
.setOutputFile(outputFile)
.setImportFile("")
.setDelimiter(";")
.setFormat(true)
.execute(false, false, false, true);
It's considered bad form to set "hibernate.hbm2ddl.auto" to "update", since automatically changing the production database may break it. For an explanation, see Hibernate hbm2ddl.auto possible values and what they do?.