写了一个JPA的客户端程序,摘录一些内容,为以后写程序参考
=========
persistence.xml
=========
Oracle:
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/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">
<persistence-unit name="JPA_Samples">
<class>com.jpa.samples.Customer</class>
<properties>
<property name="javax.persistence.jdbc.driver" value="oracle.jdbc.OracleDriver"/>
<property name="javax.persistence.jdbc.url" value="jdbc:oracle:thin:@//yourip:1521/orcl"/>
<property name="javax.persistence.jdbc.user" value="scott"/>
<property name="javax.persistence.jdbc.password" value="tiger"/>
<property name="eclipselink.logging.level" value="FINE" />
<property name="eclipselink.logging.level.sql" value="FINE" />
</properties>
</persistence-unit>
</persistence>
SQLServer:
<persistence-unit name="CT_JPA_PessimisticLock" transaction-type="RESOURCE_LOCAL">
<class>jpa.rowlock.entity.RowLockPesEntity</class>
<properties>
<property name="javax.persistence.jdbc.driver" value="com.microsoft.sqlserver.jdbc.SQLServerDriver"/>
<property name="javax.persistence.jdbc.url" value="jdbc:sqlserver://127.0.0.1:1433;databasename=db"/>
<property name="javax.persistence.jdbc.user" value="root"/>
<property name="javax.persistence.jdbc.password" value="root"/>
<property name="eclipselink.logging.level" value="FINE" />
<property name="eclipselink.logging.level.sql" value="FINE" />
</properties>
</persistence-unit>
Postgres:
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/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">
<persistence-unit name="JPATest">
<class>com.jpa.test.Customer</class>
<properties>
<property name="javax.persistence.jdbc.driver" value="org.postgresql.Driver"/>
<property name="javax.persistence.jdbc.url" value="jdbc:postgresql://localhost:5432/postgres"/>
<property name="javax.persistence.jdbc.user" value="postgres"/>
<property name="javax.persistence.jdbc.password" value="tiger"/>
<property name="eclipselink.logging.level" value="FINE" />
<property name="eclipselink.logging.level.sql" value="FINE" />
</properties>
</persistence-unit>
</persistence>
SQLite:
<persistence-unit name="JPATest">
<class>com.jpa.test.Customer</class>
<properties>
<property name="javax.persistence.jdbc.driver" value="org.sqlite.JDBC"/>
<property name="javax.persistence.jdbc.url" value="jdbc:sqlite:C:\sqlitedb\test.db"/>
<property name="eclipselink.logging.level" value="FINE" />
<property name="eclipselink.logging.level.sql" value="FINE" />
</properties>
</persistence-unit>
另外添加服务器端的:
<persistence-unit name="CT_JPA_PessimisticLock" >
<jta-data-source>jdbc/__default</jta-data-source> <!-- data resource -->
<class>jpa.rowlock.entity.RowLockPesEntity</class>
<properties>
<property name="toplink.ddl-generation" value="drop-and-create-tables" />
<property name="toplink.logging.level" value="FINE" />
<property name="toplink.logging.level.sql" value="FINE" />
</properties>
</persistence-unit>
=========
Client
=========
public static void main(String[] args) {
EntityManagerFactory emf = Persistence.createEntityManagerFactory("CT_JPA_PessimisticLock");
EntityManager em = emf.createEntityManager();
em.getTransaction().begin();
// Query query = em.createQuery("select r from RowLockPesEntity r where r.name=:name").setParameter("name", "");
// Query query = em.createQuery("select r from RowLockPesEntity r where r.id=:id").setParameter("id", 1);
// query.setHint(
// org.eclipse.persistence.config.QueryHints.PESSIMISTIC_LOCK,
// org.eclipse.persistence.config.PessimisticLock.Lock);
// RowLockPesEntity r = (RowLockPesEntity)query.getSingleResult();
// RowLockPesEntity entity = em.getReference(RowLockPesEntity.class, 1);
RowLockPesEntity entity = new RowLockPesEntity();
entity.setId(1);
entity = em.merge(entity);
em.remove(entity);
em.getTransaction().commit();
// System.out.println("id : " + r.getId() + ", name : " + r.getName());
}
=========
Entity
=========
路径: jpa.rowlock.entity.RowLockPesEntity
代码片段:
@Entity
@NamedQueries(value = {
@NamedQuery(name = "findRlpeById", query = "select r from RowLockPesEntity r where r.id = :id"),
@NamedQuery(name = "findRlpeByName", query = "select r from RowLockPesEntity r where r.name = :name")
})
public class RowLockPesEntity implements java.io.Serializable{
private static final long serialVersionUID = 1L;
@Id
private int id;
String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
===============================
toplink 中相关属性的说明
===============================
1 <property name="toplink.ddl-generation" value="none"/> do not create DDL; no schema is generated
2 <property name="toplink.ddl-generation" value="create-tables"/> create tables at startup time
3 <property name="toplink.ddl-generation" value="drop-and-create-tables "/> drop, then create tables
4 <property name="toplink.ddl-generation.output-mode" value="sql-script "/> create DDL and write it to a file
5 <property name="toplink.ddl-generation.output-mode" value="both"/> create DDL to file AND drop/create tables
6 <property name="toplink.ddl-generation.output-mode" value="database"/> do not create DDL to file and drop/create tables
7 <property name="toplink.drop-ddl-jdbc-file-name" value="fileName"/> specify destination filename for DDL
8 <property name="toplink.application-location" value="filePath"/> specify destination filepath for DDL