写了一个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