锘??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲欧洲日产国码高潮αv,亚洲依依成人精品,亚洲精品无码永久在线观看男男http://www.tkk7.com/luluyanglu/category/38297.htmlzh-cnSun, 15 Mar 2009 17:02:25 GMTSun, 15 Mar 2009 17:02:25 GMT60JPA 鍗曠嫭浣跨敤http://www.tkk7.com/luluyanglu/archive/2009/03/16/259907.html澶ч奔澶ч奔Sun, 15 Mar 2009 16:09:00 GMThttp://www.tkk7.com/luluyanglu/archive/2009/03/16/259907.htmlhttp://www.tkk7.com/luluyanglu/comments/259907.htmlhttp://www.tkk7.com/luluyanglu/archive/2009/03/16/259907.html#Feedback0http://www.tkk7.com/luluyanglu/comments/commentRss/259907.htmlhttp://www.tkk7.com/luluyanglu/services/trackbacks/259907.html  

涔嬪墠涓鐩村湪鐢‥JB3錛屼絾鐜板湪鎯沖湪J2SE閲岄潰浣跨敤JPA錛屽洜涓轟笉澶у枩嬈ibernate鐨刋ML鏂囦歡閰嶇疆銆?/p>

鑰屼嬌鐢―B4O鐨勬椂鍊欙紝鍑虹幇浜嗕竴浜涜帿鍚嶅叾濡欑殑闂錛屼竴鐩存病瑙e喅錛屽氨鏆傛椂鎼佷笅浜嗐?/p>

浣跨敤myeclipse 6寮鍙慾pa濡備笅錛?/p>

1.鍒涘緩web project

2.娣誨姞jpa capabilities錛岄夋嫨toplink錛屾妸鑷姩鍒涘緩鏁版嵁搴撶殑鍜屾洿鏂皃ersistence.xml鐨勫嬀涓?/p>

3.鍒囨崲鎴恉atabase explorer瑙嗗浘錛岄夋嫨琛紝jpa閫嗗悜宸ョ▼銆?/p>

4.嫻嬭瘯

鐢熸垚鐨刾ersistence.xml濡備笅錛?/p>

<?xml version="1.0" encoding="UTF-8"?>
<persistence 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_1_0.xsd" version="1.0">
<persistence-unit name="JPAWebPU"
transaction-type="RESOURCE_LOCAL">
<provider>
oracle.toplink.essentials.PersistenceProvider
</provider>
<class>com.persia.entity.Consumer</class>
<properties>
<property name="toplink.jdbc.driver"
value="com.mysql.jdbc.Driver" />
<property name="toplink.jdbc.url"
value="jdbc:mysql://localhost:3306/ejb3" />
<property name="toplink.jdbc.user" value="root" />
<property name="toplink.jdbc.password" value="root" />
<property name="toplink.ddl-generation"
value="create-tables" />
</properties>
</persistence-unit>
</persistence>

 

鐢熸垚鐨勫嚑涓被濡備笅錛?/p>

瀹炰綋綾伙細

package com.persia.entity;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
/**
* Consumer entity.
*
* @author MyEclipse Persistence Tools
*/
@Entity
@Table(name = "consumer", catalog = "ejb3", uniqueConstraints = {})
public class Consumer implements java.io.Serializable {
// Fields
private Integer id;
private String name;
private String password;
// Constructors
/** default constructor */
public Consumer() {
}
/** full constructor */
public Consumer(Integer id, String name, String password) {
this.id = id;
this.name = name;
this.password = password;
}
// Property accessors
@Id
@Column(name = "id", unique = true, nullable = false, insertable = true, updatable = true)
public Integer getId() {
return this.id;
}
public void setId(Integer id) {
this.id = id;
}
@Column(name = "name", unique = false, nullable = false, insertable = true, updatable = true, length = 45)
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
@Column(name = "password", unique = false, nullable = false, insertable = true, updatable = true, length = 45)
public String getPassword() {
return this.password;
}
public void setPassword(String password) {
this.password = password;
}
}
 

DAO鎺ュ彛

package com.persia.entity;
import java.util.List;
/**
* Interface for ConsumerDAO.
*
* @author MyEclipse Persistence Tools
*/
public interface IConsumerDAO {
/**
* Perform an initial save of a previously unsaved Consumer entity. All
* subsequent persist actions of this entity should use the #update()
* method. This operation must be performed within the a database
* transaction context for the entity's data to be permanently saved to the
* persistence store, i.e., database. This method uses the
* {@link javax.persistence.EntityManager#persist(Object) EntityManager#persist}
* operation.
*
* <pre>
* EntityManagerHelper.beginTransaction();
* IConsumerDAO.save(entity);
* EntityManagerHelper.commit();
* </pre>
*
* @param entity
*            Consumer entity to persist
* @throws RuntimeException
*             when the operation fails
*/
public void save(Consumer entity);
/**
* Delete a persistent Consumer entity. This operation must be performed
* within the a database transaction context for the entity's data to be
* permanently deleted from the persistence store, i.e., database. This
* method uses the
* {@link javax.persistence.EntityManager#remove(Object) EntityManager#delete}
* operation.
*
* <pre>
* EntityManagerHelper.beginTransaction();
* IConsumerDAO.delete(entity);
* EntityManagerHelper.commit();
* entity = null;
* </pre>
*
* @param entity
*            Consumer entity to delete
* @throws RuntimeException
*             when the operation fails
*/
public void delete(Consumer entity);
/**
* Persist a previously saved Consumer entity and return it or a copy of it
* to the sender. A copy of the Consumer entity parameter is returned when
* the JPA persistence mechanism has not previously been tracking the
* updated entity. This operation must be performed within the a database
* transaction context for the entity's data to be permanently saved to the
* persistence store, i.e., database. This method uses the
* {@link javax.persistence.EntityManager#merge(Object) EntityManager#merge}
* operation.
*
* <pre>
* EntityManagerHelper.beginTransaction();
* entity = IConsumerDAO.update(entity);
* EntityManagerHelper.commit();
* </pre>
*
* @param entity
*            Consumer entity to update
* @returns Consumer the persisted Consumer entity instance, may not be the
*          same
* @throws RuntimeException
*             if the operation fails
*/
public Consumer update(Consumer entity);
public Consumer findById(Integer id);
/**
* Find all Consumer entities with a specific property value.
*
* @param propertyName
*            the name of the Consumer property to query
* @param value
*            the property value to match
* @return List<Consumer> found by query
*/
public List<Consumer> findByProperty(String propertyName, Object value);
public List<Consumer> findByName(Object name);
public List<Consumer> findByPassword(Object password);
/**
* Find all Consumer entities.
*
* @return List<Consumer> all Consumer entities
*/
public List<Consumer> findAll();
}

 

DAO綾?/p>

package com.persia.entity;
import java.util.List;
import java.util.logging.Level;
import javax.persistence.EntityManager;
import javax.persistence.Query;
/**
* A data access object (DAO) providing persistence and search support for
* Consumer entities. Transaction control of the save(), update() and delete()
* operations must be handled externally by senders of these methods or must be
* manually added to each of these methods for data to be persisted to the JPA
* datastore.
*
* @see com.persia.entity.Consumer
* @author MyEclipse Persistence Tools
*/
public class ConsumerDAO implements IConsumerDAO {
// property constants
public static final String NAME = "name";
public static final String PASSWORD = "password";
private EntityManager getEntityManager() {
return EntityManagerHelper.getEntityManager();
}
/**
* Perform an initial save of a previously unsaved Consumer entity. All
* subsequent persist actions of this entity should use the #update()
* method. This operation must be performed within the a database
* transaction context for the entity's data to be permanently saved to the
* persistence store, i.e., database. This method uses the
* {@link javax.persistence.EntityManager#persist(Object) EntityManager#persist}
* operation.
*
* <pre>
* EntityManagerHelper.beginTransaction();
* ConsumerDAO.save(entity);
* EntityManagerHelper.commit();
* </pre>
*
* @param entity
*            Consumer entity to persist
* @throws RuntimeException
*             when the operation fails
*/
public void save(Consumer entity) {
EntityManagerHelper.log("saving Consumer instance", Level.INFO, null);
try {
getEntityManager().persist(entity);
EntityManagerHelper.log("save successful", Level.INFO, null);
} catch (RuntimeException re) {
EntityManagerHelper.log("save failed", Level.SEVERE, re);
throw re;
}
}
/**
* Delete a persistent Consumer entity. This operation must be performed
* within the a database transaction context for the entity's data to be
* permanently deleted from the persistence store, i.e., database. This
* method uses the
* {@link javax.persistence.EntityManager#remove(Object) EntityManager#delete}
* operation.
*
* <pre>
* EntityManagerHelper.beginTransaction();
* ConsumerDAO.delete(entity);
* EntityManagerHelper.commit();
* entity = null;
* </pre>
*
* @param entity
*            Consumer entity to delete
* @throws RuntimeException
*             when the operation fails
*/
public void delete(Consumer entity) {
EntityManagerHelper.log("deleting Consumer instance", Level.INFO, null);
try {
entity = getEntityManager().getReference(Consumer.class,
entity.getId());
getEntityManager().remove(entity);
EntityManagerHelper.log("delete successful", Level.INFO, null);
} catch (RuntimeException re) {
EntityManagerHelper.log("delete failed", Level.SEVERE, re);
throw re;
}
}
/**
* Persist a previously saved Consumer entity and return it or a copy of it
* to the sender. A copy of the Consumer entity parameter is returned when
* the JPA persistence mechanism has not previously been tracking the
* updated entity. This operation must be performed within the a database
* transaction context for the entity's data to be permanently saved to the
* persistence store, i.e., database. This method uses the
* {@link javax.persistence.EntityManager#merge(Object) EntityManager#merge}
* operation.
*
* <pre>
* EntityManagerHelper.beginTransaction();
* entity = ConsumerDAO.update(entity);
* EntityManagerHelper.commit();
* </pre>
*
* @param entity
*            Consumer entity to update
* @returns Consumer the persisted Consumer entity instance, may not be the
*          same
* @throws RuntimeException
*             if the operation fails
*/
public Consumer update(Consumer entity) {
EntityManagerHelper.log("updating Consumer instance", Level.INFO, null);
try {
Consumer result = getEntityManager().merge(entity);
EntityManagerHelper.log("update successful", Level.INFO, null);
return result;
} catch (RuntimeException re) {
EntityManagerHelper.log("update failed", Level.SEVERE, re);
throw re;
}
}
public Consumer findById(Integer id) {
EntityManagerHelper.log("finding Consumer instance with id: " + id,
Level.INFO, null);
try {
Consumer instance = getEntityManager().find(Consumer.class, id);
return instance;
} catch (RuntimeException re) {
EntityManagerHelper.log("find failed", Level.SEVERE, re);
throw re;
}
}
/**
* Find all Consumer entities with a specific property value.
*
* @param propertyName
*            the name of the Consumer property to query
* @param value
*            the property value to match
* @return List<Consumer> found by query
*/
@SuppressWarnings("unchecked")
public List<Consumer> findByProperty(String propertyName, final Object value) {
EntityManagerHelper.log("finding Consumer instance with property: "
+ propertyName + ", value: " + value, Level.INFO, null);
try {
final String queryString = "select model from Consumer model where model."
+ propertyName + "= :propertyValue";
Query query = getEntityManager().createQuery(queryString);
query.setParameter("propertyValue", value);
return query.getResultList();
} catch (RuntimeException re) {
EntityManagerHelper.log("find by property name failed",
Level.SEVERE, re);
throw re;
}
}
public List<Consumer> findByName(Object name) {
return findByProperty(NAME, name);
}
public List<Consumer> findByPassword(Object password) {
return findByProperty(PASSWORD, password);
}
/**
* Find all Consumer entities.
*
* @return List<Consumer> all Consumer entities
*/
@SuppressWarnings("unchecked")
public List<Consumer> findAll() {
EntityManagerHelper.log("finding all Consumer instances", Level.INFO,
null);
try {
final String queryString = "select model from Consumer model";
Query query = getEntityManager().createQuery(queryString);
return query.getResultList();
} catch (RuntimeException re) {
EntityManagerHelper.log("find all failed", Level.SEVERE, re);
throw re;
}
}
}

 

榪樻湁涓涓潪甯告湁鐢ㄧ殑helper

package com.persia.entity;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.Query;
/**
* @author MyEclipse Persistence Tools
*/
public class EntityManagerHelper {
private static final EntityManagerFactory emf;
private static final ThreadLocal<EntityManager> threadLocal;
private static final Logger logger;
static {
emf = Persistence.createEntityManagerFactory("JPAWebPU");
threadLocal = new ThreadLocal<EntityManager>();
logger = Logger.getLogger("JPAWebPU");
logger.setLevel(Level.ALL);
}
public static EntityManager getEntityManager() {
EntityManager manager = threadLocal.get();
if (manager == null || !manager.isOpen()) {
manager = emf.createEntityManager();
threadLocal.set(manager);
}
return manager;
}
public static void closeEntityManager() {
EntityManager em = threadLocal.get();
threadLocal.set(null);
if (em != null) em.close();
}
public static void beginTransaction() {
getEntityManager().getTransaction().begin();
}
public static void commit() {
getEntityManager().getTransaction().commit();
}
public static void rollback() {
getEntityManager().getTransaction().rollback();
}
public static Query createQuery(String query) {
return getEntityManager().createQuery(query);
}
public static void log(String info, Level level, Throwable ex) {
logger.log(level, info, ex);
}
}

 

鐒跺悗浣跨敤helper鍜宒ao榪涜嫻嬭瘯

package com.jpa.test;
import java.util.List;
import com.persia.entity.Consumer;
import com.persia.entity.ConsumerDAO;
import com.persia.entity.EntityManagerHelper;
public class JPATest {
/**
* @param args
*/
public static void main(String[] args) {
// 1.鍒涘緩 DAO
ConsumerDAO dao = new ConsumerDAO();
// 2.鍒涘緩瀹炰綋綾?/span>
Consumer c = new Consumer();
c.setName("jpa01");
c.setPassword("jianchi");
// 寮濮嬩簨鍔?
EntityManagerHelper.beginTransaction();
// 3. 淇濆瓨
dao.save(c);
// 鎻愪氦浜嬪姟鐪熸淇濆瓨瀹炰綋鍒版暟鎹簱
EntityManagerHelper.commit();
// 4. 鍒楀嚭鏁版嵁搴撲腑鎵鏈夊璞?/span>
List<Consumer> result = dao.findAll();
for(Consumer o : result) {
System.out.println(o.getId());
System.out.println(o.getName());
}
}
}

 

嫻嬭瘯瀹炰緥濡備笅錛?/p>

package test;
import java.util.List;
import dao.*;
public class JPATest {
public static void main(String[] args) {
// 1.鍒涘緩 DAO
StudentDAO dao = new StudentDAO();
// 2.鍒涘緩瀹炰綋綾?/span>
Student user = new Student();
user.setUsername("hellojpa test");
user.setPassword("jpa password");
user.setAge(20);
// 寮濮嬩簨鍔?
EntityManagerHelper.beginTransaction();
// 3. 淇濆瓨
dao.save(user);
// 鎻愪氦浜嬪姟鐪熸淇濆瓨瀹炰綋鍒版暟鎹簱
EntityManagerHelper.commit();
// 4. 鍒楀嚭鏁版嵁搴撲腑鎵鏈夊璞?/span>
List<Student> result = dao.findAll();
for(Student o : result) {
System.out.println(o.getId());
System.out.println(o.getUsername());
}
// 5. 鏇存敼鐢ㄦ埛鍚?/span>
user.setUsername("嫻嬭瘯JPA");
// 寮濮嬩簨鍔?
EntityManagerHelper.beginTransaction();
// 淇濆瓨錛圝PA浼氳嚜鍔ㄦ洿鏂板彉鍔ㄨ繃鐨勫瓧孌碉級
dao.update(user);
// 鎻愪氦浜嬪姟鐪熸淇濆瓨瀹炰綋鍒版暟鎹簱
EntityManagerHelper.commit();
// 6. 鏌ユ壘鎵鏈夊勾榫勪負20鐨勭敤鎴鳳紝浠庣1涓紑濮嬭幏鍙栵紙絎?涓槸絎竴鏉¤褰曪級
result = dao.findByAge(20, 1);
for(Student o : result) {
System.out.println(o.getId());
System.out.println(o.getUsername());
}
// 7. 鏍規嵁 ID 鏌ユ壘
user = dao.findById(2);
System.out.println(user.getUsername());
// 8. 鍒犻櫎
// 寮濮嬩簨鍔?
EntityManagerHelper.beginTransaction();
// 淇濆瓨錛圝PA浼氳嚜鍔ㄦ洿鏂板彉鍔ㄨ繃鐨勫瓧孌碉級
dao.delete(user);
// 鎻愪氦浜嬪姟鐪熸淇濆瓨瀹炰綋鍒版暟鎹簱
EntityManagerHelper.commit();
}
}

 

鑻ラ儴緗插埌tomcat錛屾病鏈変粈涔堥棶棰橈紝涔熶笉瑕侀澶栨坊鍔犱粈涔堛?/p>



澶ч奔 2009-03-16 00:09 鍙戣〃璇勮
]]>
JPA鏄粈涔?/title><link>http://www.tkk7.com/luluyanglu/archive/2009/03/15/259902.html</link><dc:creator>澶ч奔</dc:creator><author>澶ч奔</author><pubDate>Sun, 15 Mar 2009 15:42:00 GMT</pubDate><guid>http://www.tkk7.com/luluyanglu/archive/2009/03/15/259902.html</guid><wfw:comment>http://www.tkk7.com/luluyanglu/comments/259902.html</wfw:comment><comments>http://www.tkk7.com/luluyanglu/archive/2009/03/15/259902.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/luluyanglu/comments/commentRss/259902.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/luluyanglu/services/trackbacks/259902.html</trackback:ping><description><![CDATA[<div id="tttpzzt" class="postTitle">JPA鏄粈涔?</div> 瀹氫箟 Java Persistence API<br /> JPA閫氳繃JDK 5.0娉ㄨВ鎴朮ML鎻忚堪瀵硅薄錛嶅叧緋昏〃鐨勬槧灝勫叧緋伙紝騫跺皢榪愯鏈熺殑瀹炰綋瀵硅薄鎸佷箙鍖栧埌鏁版嵁搴撲腑銆? <h2>璧鋒簮</h2> Sun寮曞叆鏂扮殑JPA ORM瑙勮寖鍑轟簬涓や釜鍘熷洜錛氬叾涓錛岀畝鍖栫幇鏈塉ava EE鍜孞ava SE搴旂敤鐨勫璞℃寔涔呭寲鐨勫紑鍙戝伐浣滐紱鍏朵簩錛孲un甯屾湜鏁村悎瀵筄RM鎶鏈紝瀹炵幇澶╀笅褰掍竴銆?br /> JPA鐢盓JB 3.0杞歡涓撳緇勫紑鍙戯紝浣滀負JSR-220瀹炵幇鐨勪竴閮ㄥ垎銆備絾瀹冧笉鍥夸簬EJB 3.0錛屼綘鍙互鍦╓eb搴旂敤銆佺敋鑷蟲闈㈠簲鐢ㄤ腑浣跨敤銆侸PA鐨勫畻鏃ㄦ槸涓篜OJO鎻愪緵鎸佷箙鍖栨爣鍑嗚鑼冿紝鐢辨鍙錛岀粡榪囪繖鍑犲勾鐨勫疄璺墊帰绱紝鑳藉鑴辯瀹瑰櫒鐙珛榪?琛岋紝鏂逛究寮鍙戝拰嫻嬭瘯鐨勭悊蹇靛凡緇忔繁鍏ヤ漢蹇冧簡銆傜洰鍓岺ibernate 3.2銆乀opLink 10.1.3浠ュ強OpenJPA閮芥彁渚涗簡JPA鐨勫疄鐜般?br /> JPA鐨勬諱綋鎬濇兂鍜岀幇鏈塇ibernate銆乀opLink錛孞DO絳塐RM妗嗘灦澶т綋涓鑷淬傛葷殑鏉ヨ錛孞PA鍖呮嫭浠ヤ笅3鏂歸潰鐨勬妧鏈細<br /> <strong>ORM鏄犲皠鍏冩暟鎹?/strong><br /> JPA鏀寔XML鍜孞DK 5.0娉ㄨВ涓ょ鍏冩暟鎹殑褰㈠紡錛屽厓鏁版嵁鎻忚堪瀵硅薄鍜岃〃涔嬮棿鐨勬槧灝勫叧緋伙紝妗嗘灦鎹灝嗗疄浣撳璞℃寔涔呭寲鍒版暟鎹簱琛ㄤ腑錛?br /> <strong>JPA 鐨凙PI</strong><br /> 鐢ㄦ潵鎿嶄綔瀹炰綋瀵硅薄錛屾墽琛孋RUD鎿嶄綔錛屾鏋跺湪鍚庡彴鏇挎垜浠畬鎴愭墍鏈夌殑浜嬫儏錛屽紑鍙戣呬粠綣佺悙鐨凧DBC鍜孲QL浠g爜涓В鑴卞嚭鏉ャ?br /> <strong>鏌ヨ璇█</strong><br /> 榪欐槸鎸佷箙鍖栨搷浣滀腑寰堥噸瑕佺殑涓涓柟闈紝閫氳繃闈㈠悜瀵硅薄鑰岄潪闈㈠悜鏁版嵁搴撶殑鏌ヨ璇█鏌ヨ鏁版嵁錛岄伩鍏嶇▼搴忕殑SQL璇彞绱у瘑鑰﹀悎銆? <h2>JPA鐨勪紭鍔?/h2> <strong>1 鏍囧噯鍖?/strong><br /> JPA 鏄?JCP 緇勭粐鍙戝竷鐨?Java EE 鏍囧噯涔嬩竴錛屽洜姝や換浣曞0縐扮鍚?JPA 鏍囧噯鐨勬鏋墮兘閬靛驚鍚屾牱鐨勬灦鏋勶紝鎻愪緵鐩稿悓鐨勮闂?API錛岃繖淇濊瘉浜嗗熀浜嶫PA寮鍙戠殑浼佷笟搴旂敤鑳藉緇忚繃灝戦噺鐨勪慨鏀瑰氨鑳藉鍦ㄤ笉鍚岀殑JPA妗嗘灦涓嬭繍琛屻?br /> <strong>2 瀵瑰鍣ㄧ駭鐗規х殑鏀寔</strong><br /> JPA 妗嗘灦涓敮鎸佸ぇ鏁版嵁闆嗐佷簨鍔°佸茍鍙戠瓑瀹瑰櫒綰т簨鍔★紝榪欎嬌寰?JPA 瓚呰秺浜嗙畝鍗曟寔涔呭寲妗嗘灦鐨勫眬闄愶紝鍦ㄤ紒涓氬簲鐢ㄥ彂鎸ユ洿澶х殑浣滅敤銆?br /> <strong>3 綆鍗曟槗鐢紝闆嗘垚鏂逛究</strong><br /> JPA鐨勪富瑕佺洰鏍囦箣涓灝辨槸鎻愪緵鏇村姞綆鍗曠殑緙栫▼妯″瀷錛氬湪JPA妗嗘灦涓嬪垱寤哄疄浣撳拰鍒涘緩Java 綾諱竴鏍風畝鍗曪紝娌℃湁浠諱綍鐨勭害鏉熷拰闄愬埗錛屽彧闇瑕佷嬌鐢?javax.persistence.Entity榪涜娉ㄩ噴錛汮PA鐨勬鏋跺拰鎺ュ彛涔熼兘闈炲父綆鍗曪紝娌℃湁澶鐗瑰埆鐨勮鍒欏拰璁捐妯″紡鐨勮姹傦紝寮鍙戣呭彲浠ュ緢瀹規槗鐨?鎺屾彙銆侸PA鍩轟簬闈炰鏡鍏ュ紡鍘熷垯璁捐錛屽洜姝ゅ彲浠ュ緢瀹規槗鐨勫拰鍏跺畠妗嗘灦鎴栬呭鍣ㄩ泦鎴愩?br /> <strong>4 鍙緹嶫DBC鐨勬煡璇㈣兘鍔?/strong><br /> JPA鐨勬煡璇㈣璦鏄潰鍚戝璞¤岄潪闈㈠悜鏁版嵁搴撶殑錛屽畠浠ラ潰鍚戝璞$殑鑷劧璇硶鏋勯犳煡璇㈣鍙ワ紝鍙互鐪嬫垚 鏄疕ibernate HQL鐨勭瓑浠風墿銆侸PA瀹氫箟浜嗙嫭鐗圭殑JPQL錛圝ava Persistence Query Language錛夛紝JPQL鏄疎JB QL鐨勪竴縐嶆墿灞曪紝瀹冩槸閽堝瀹炰綋鐨勪竴縐嶆煡璇㈣璦錛屾搷浣滃璞℃槸瀹炰綋錛岃屼笉鏄叧緋繪暟鎹簱鐨勮〃錛岃屼笖鑳藉鏀寔鎵歸噺鏇存柊鍜屼慨鏀廣丣OIN銆丟ROUP BY銆丠AVING 絳夐氬父鍙湁 SQL 鎵嶈兘澶熸彁渚涚殑楂樼駭鏌ヨ鐗規э紝鐢氳嚦榪樿兘澶熸敮鎸佸瓙鏌ヨ銆?br /> <strong>5 鏀寔闈㈠悜瀵硅薄鐨勯珮綰х壒鎬?/strong><br /> JPA 涓兘澶熸敮鎸侀潰鍚戝璞$殑楂樼駭鐗規э紝濡傜被涔嬮棿鐨勭戶鎵褲佸鎬佸拰綾諱箣闂寸殑澶嶆潅鍏崇郴錛岃繖鏍風殑鏀寔鑳藉璁╁紑鍙戣呮渶澶ч檺搴︾殑浣跨敤闈㈠悜瀵硅薄鐨勬ā鍨嬭璁′紒涓氬簲鐢紝鑰屼笉闇瑕佽嚜琛屽鐞嗚繖浜涚壒鎬у湪鍏崇郴鏁版嵁搴撶殑鎸佷箙鍖栥? <h2>JPA鐨勪緵搴斿晢</h2> JPA 鐨勭洰鏍囦箣涓鏄埗瀹氫竴涓彲浠ョ敱寰堝渚涘簲鍟嗗疄鐜扮殑API錛屽茍涓斿紑鍙戜漢鍛樺彲浠ョ紪鐮佹潵瀹炵幇璇PI錛岃屼笉鏄嬌鐢ㄧ鏈変緵搴斿晢鐗規湁鐨凙PI銆傚洜姝ゅ紑鍙戜漢鍛樺彧闇浣跨敤渚涘簲 鍟嗙壒鏈夌殑API鏉ヨ幏寰桱PA瑙勮寖娌℃湁瑙e喅浣嗗簲鐢ㄧ▼搴忎腑闇瑕佺殑鍔熻兘銆傚敖鍙兘鍦頒嬌鐢↗PA API錛屼絾鏄綋闇瑕佷緵搴斿晢鍏紑浣嗘槸瑙勮寖涓病鏈夋彁渚涚殑鍔熻兘鏃訛紝鍒欎嬌鐢ㄤ緵搴斿晢鐗規湁鐨凙PI銆?br /> <strong>1 Hibernate</strong><br /> JPA鏄渶瑕丳rovider鏉ュ疄鐜板叾鍔熻兘鐨勶紝Hibernate灝辨槸JPA Provider涓緢寮虹殑涓涓紝鐩墠鏉ヨ搴旇鏃犱漢鑳藉嚭鍏跺彸銆備粠鍔熻兘涓婃潵璇達紝JPA鐜板湪灝辨槸Hibernate鍔熻兘鐨勪竴涓瓙闆嗐侶ibernate 浠?.2寮濮嬶紝灝卞紑濮嬪吋瀹笿PA銆侶ibernate3.2鑾峰緱浜哠un TCK鐨凧PA(Java Persistence API) 鍏煎璁よ瘉銆?br /> 鍙鐔熸倝Hibernate鎴栬呭叾浠朞RM妗嗘灦錛屽湪浣跨敤JPA鏃朵細鍙戠幇鍏跺疄闈炲父瀹規槗涓婃墜銆備緥濡?瀹炰綋瀵硅薄鐨勭姸鎬侊紝鍦℉ibernate鏈夎嚜鐢便佹寔涔呫佹父紱諱笁縐嶏紝JPA閲屾湁new錛宮anaged錛宒etached錛宺emoved錛屾槑鐪間漢涓鐪嬪氨鐭?閬擄紝榪欎簺鐘舵侀兘鏄竴涓瀵瑰簲鐨勩傚啀濡俧lush鏂規硶錛岄兘鏄搴旂殑錛岃屽叾浠栫殑鍐嶅璇碤uery query = manager.createQuery(sql)錛屽畠鍦℉ibernate閲屽啓娉曚笂鏄痵ession錛岃屽湪JPA涓彉鎴愪簡manager錛屾墍浠ヤ粠 Hibernate鍒癑PA鐨勪唬浠峰簲璇ユ槸闈炲父灝忕殑<br /> 鍚屾牱錛孞DO錛屼篃寮濮嬪吋瀹笿PA銆傚湪ORM鐨勯鍩熶腑錛岀湅鏉PA宸茬粡鏄帇閬擄紝瑙勮寖灝辨槸瑙勮寖銆傚湪鍚勫ぇ鍘傚晢鐨勬敮鎸佷笅錛孞PA鐨勪嬌鐢ㄥ紑濮嬪彉寰楀箍娉涖?br /> <strong>2 Spring</strong><br /> Spring + Hibernate 甯稿父琚О涓?Java Web 搴旂敤浜烘皵鏈鏃虹殑妗嗘灦緇勫悎銆傝屽湪 JCP 閫氳繃鐨?Web Beans JSR 錛屽嵈嬈插皢JSF + EJB + JPA 銆佹潵鑷?JBoss Seam錛圫pring 闄ゅ錛夌殑涓浜涚粍浠跺拰EJB 3錛堢洰鍓嶈兘澶熸彁渚涙湁鍩烘湰鎷︽埅鍜屼緷璧栨敞鍏ュ姛鑳界殑綆鍖?Session Bean 妗嗘灦錛夌殑涓涓?Web 緇勫悎榪涜鏍囧噯鍖栥傚浠婄殑 Spring 2.0 涓?JPA 鎻愪緵浜嗗畬鏁寸殑 EJB 瀹瑰櫒濂戠害錛屽厑璁?JPA鍦ㄤ換浣曠幆澧冨唴鍙互鍦?Spring 綆$悊鐨勬湇鍔″眰浣跨敤錛堝寘鎷?Spring 鐨勬墍鏈?AOP 鍜?DI 澧炲己錛夈傚悓鏃訛紝鍏充簬涓嬩竴涓猈eb搴旂敤緇勫悎浼氭槸 EJB銆丼pring + Hibernate 榪樻槸 Spring + JPA 鐨勮鎴橈紝鏃╁凡鍏呮枼浜庤熾?br /> 鍦⊿pring 2.0.1涓紝姝e紡鎻愪緵瀵笿PA鐨勬敮鎸侊紝榪欎篃淇冩垚浜咼PA鐨勫彂灞曪紝瑕佺煡閬揓PA鐨勫ソ澶勫湪浜庡彲浠ュ垎紱諱簬瀹瑰櫒榪愯錛屽彉寰楁洿鍔犵殑綆媧併?br /> <strong>3 OpenJPA</strong><br /> OpenJPA 鏄?Apache 緇勭粐鎻愪緵鐨勫紑婧愰」鐩紝瀹冨疄鐜頒簡 EJB 3.0 涓殑 JPA 鏍囧噯錛屼負寮鍙戣呮彁渚涘姛鑳藉己澶с佷嬌鐢ㄧ畝鍗曠殑鎸佷箙鍖栨暟鎹鐞嗘鏋躲侽penJPA 灝佽浜嗗拰鍏崇郴鍨嬫暟鎹簱浜や簰鐨勬搷浣滐紝璁╁紑鍙戣呮妸娉ㄦ剰鍔涢泦涓湪緙栧啓涓氬姟閫昏緫涓娿侽penJPA 鍙互浣滀負鐙珛鐨勬寔涔呭眰妗嗘灦鍙戞尌浣滅敤錛屼篃鍙互杞繪澗鐨勪笌鍏跺畠 Java EE 搴旂敤妗嗘灦鎴栬呯鍚?EJB 3.0 鏍囧噯鐨勫鍣ㄩ泦鎴愩?br /> <strong>4 鍏跺畠</strong><br /> 鐩墠鏀寔鐨勫疄鐜板寘鎷琓oplink銆丠ibernate Entitymanager絳夈俆opLink浠ュ墠闇瑕佹敹璐癸紝濡備粖寮婧愪簡銆侽penJPA铏界劧鍏嶈垂錛屼絾鍔熻兘銆佹ц兘銆佹櫘鍙婃х瓑鏂歸潰鏇村姞闇瑕佸姞澶у姏搴︺?br /> 瀵逛簬EJB鏉ヨ錛屽疄浣揃ean涓鐩存槸琚壒璇勭殑瀵硅薄錛岀敱浜庡叾澶鏉傚拰搴炲ぇ銆侸PA鐨勫嚭鐜幫紝寰堝ぇ紼嬪害鐨勫垎紱諱簡澶嶆潅鎬с傝繖璁〦JB鐨勬帹騫夸篃鍙樺緱瀹規槗銆?br /> 鎬昏岃█涔嬶紝JPA瑙勮寖涓昏鍏蟲敞鐨勪粎鏄疉PI鐨勮涓烘柟闈紝鑰岀敱鍚勭瀹炵幇瀹屾垚澶у鏁版ц兘鏈夊叧鐨勮皟浼樸傚敖綆″姝わ紝鎵鏈夊彲闈犵殑瀹炵幇閮藉簲璇ユ嫢鏈夋煇縐嶆暟鎹紦瀛橈紝浠ヤ綔涓洪夋嫨銆備絾鎰夸笉涔呯殑灝嗘潵錛孞PA鑳芥垚涓虹湡姝g殑鏍囧噯銆?br /> <strong>灝忕粨</strong><br /> EJB 3.0鍜孞PA 姣棤鐤戦棶灝嗘槸Java EE 5鐨勪富瑕佸崠鐐廣傚湪鏌愪簺棰嗗煙涓紝瀹冧滑緇橨ava紺懼尯甯︽潵浜嗙珵浜変紭鍔匡紝騫朵嬌Java 鍦ㄥ叾浠栭鍩熶笌绔炰簤瀵規墜涓嶅垎浼徊錛堝洜涓猴紝涓嶅彲鍚﹁錛岀洰鍓嶆煇浜涢鍩熷皻涓嶅瓨鍦ㄥ熀浜庢爣鍑嗙殑鏂規硶錛夈?br /> 榪囧幓鏁板勾鏉ワ紝Spring Framework涓鐩存槸EJB鍦ㄤ紒涓氶鍩熺殑涓昏绔炰簤瀵規墜銆侲JB3.0瑙勮寖瑙e喅浜嗗緢澶氫績榪汼pring鍏磋搗鐨勯棶棰樸傞殢鐫瀹冪殑鍑虹幇錛孍JB3.0姣棤鐤戦棶姣擲pring鎻愪緵浜嗘洿濂界殑寮鍙戜綋楠屸斺旀渶寮曚漢娉ㄧ洰鐨勪紭鍔挎槸瀹冧笉闇瑕侀厤緗枃浠躲?br /> JPA鎻愪緵涓縐嶆爣鍑嗙殑OR鏄犲皠瑙e喅鏂規錛岃瑙e喅鏂規瀹屽叏闆嗘垚鍒癊JB3銆?鍏煎鐨勫鍣ㄤ腑銆侸PA鐨勫墠杈堝皢浼氱戶緇ǔ瀹氬彂灞曪紝浣嗘槸涓氬姟搴旂敤紼嬪簭涓殑 raw 浣跨敤灝嗗彲鑳戒細鍑忓皯銆傚疄鐜?JPA 鍏煎鐨勫疄浣撶鐞嗗櫒浼間箮寰堝彲鑳芥槸姝ょ被鎶鏈殑鍙戝睍鏂瑰悜銆?br /> Java EE緋誨垪瑙勮寖鐨勮緝澶ч棶棰樹笌JPA娌℃湁浠諱綍鍏崇郴銆侸ava EE 緋誨垪瑙勮寖鐨勯棶棰樻秹鍙婂埌 Web鍜孍JB瀹瑰櫒涔嬮棿鐨勯泦鎴愩係pring鍦ㄦ棰嗗煙浠嶇劧鍏鋒湁涓昏绔炰簤浼樺娍銆侸Boss鐨凷eam欏圭洰灝濊瘯浣跨敤鑷畾涔夌殑鏂規硶鏉ヨВ鍐寵繖涓闂銆侰aucho Resin搴旂敤鏈嶅姟鍣ㄨ瘯鍥炬墿灞曞鍣ㄨ竟鐣屽茍鏀寔鍦╓eb瀹瑰櫒涓嬌鐢ˊEJB娉ㄩ噴銆傛垜浠笇鏈汮ava EE 5.1灝嗚В鍐沖眰闆嗘垚鐨勯棶棰橈紝涓烘垜浠彁渚涗竴涓叏闈㈣屾爣鍑嗙殑渚濊禆鎬ф敞鍏ユ柟娉曘?br /> 鍦ㄤ笉涔呯殑灝嗘潵錛孲un鍙兘浼氬皢JPA浣滀負涓涓崟鐙殑JSR瀵瑰緟錛屽悓鏃禞PA榪樺彲鑳戒綔涓篔ava SE鐨勪竴閮ㄥ垎銆備笉榪囪繖浜涢兘涓嶅お閲嶈錛岄噸瑕佺殑鏄紝鎴戜滑鐜板湪宸茬粡鍙互鍦ㄨ劚紱誨鍣ㄧ殑鎯呭喌涓嬨佸湪Java SE搴旂敤涓嬌鐢↗PA浜嗐?<br /> JPA宸茬粡浣滀負涓欏瑰璞℃寔涔呭寲鐨勬爣鍑嗭紝涓嶄絾鍙互鑾峰緱Java EE搴旂敤鏈嶅姟鍣ㄧ殑鏀寔錛岃繕鍙互鐩存帴鍦↗ava SE涓嬌鐢ㄣ傚紑鍙戣呭皢鏃犻渶鍦ㄧ幇鏈夊縐峅RM妗嗘灦涓壈闅懼湴閫夋嫨錛屾寜鐓un鐨勯鎯籌紝鐜版湁ORM妗嗘灦澶撮《鐨勫厜鐜皢娓愭笎鏆楁貳錛屼笉鍐嶅叿鏈変互寰鐨勫惛寮曞姏銆? <img src ="http://www.tkk7.com/luluyanglu/aggbug/259902.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/luluyanglu/" target="_blank">澶ч奔</a> 2009-03-15 23:42 <a href="http://www.tkk7.com/luluyanglu/archive/2009/03/15/259902.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>JPA娉ㄩ噴鍙傝冩墜鍐?/title><link>http://www.tkk7.com/luluyanglu/archive/2009/03/15/259895.html</link><dc:creator>澶ч奔</dc:creator><author>澶ч奔</author><pubDate>Sun, 15 Mar 2009 14:41:00 GMT</pubDate><guid>http://www.tkk7.com/luluyanglu/archive/2009/03/15/259895.html</guid><wfw:comment>http://www.tkk7.com/luluyanglu/comments/259895.html</wfw:comment><comments>http://www.tkk7.com/luluyanglu/archive/2009/03/15/259895.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/luluyanglu/comments/commentRss/259895.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/luluyanglu/services/trackbacks/259895.html</trackback:ping><description><![CDATA[<div> <h2>Table</h2> <p>Table鐢ㄦ潵瀹氫箟entity涓昏〃鐨刵ame錛宑atalog錛宻chema絳夊睘鎬с?</p> <p>鍏冩暟鎹睘鎬ц鏄庯細 </p> <ul> <li>name: 琛ㄥ悕 <li>catalog: 瀵瑰簲鍏崇郴鏁版嵁搴撲腑鐨刢atalog <li>schema錛氬搴斿叧緋繪暟鎹簱涓殑schema <li>UniqueConstraints:瀹氫箟涓涓猆niqueConstraint鏁扮粍錛屾寚瀹氶渶瑕佸緩鍞竴綰︽潫鐨勫垪 </li> </ul> <div> <pre> <br /> @Entity<br /> @Table(name="CUST")<br /> public class Customer { ... }<br /> 銆銆</pre> </div> </div> <div> <h2>SecondaryTable</h2> <p>涓涓猠ntity class鍙互鏄犲皠鍒板琛紝SecondaryTable鐢ㄦ潵瀹氫箟鍗曚釜浠庤〃鐨勫悕瀛楋紝涓婚敭鍚嶅瓧絳夊睘鎬с?</p> <p>鍏冩暟鎹睘鎬ц鏄庯細 </p> <ul> <li>name: 琛ㄥ悕 <li>catalog: 瀵瑰簲鍏崇郴鏁版嵁搴撲腑鐨刢atalog <li>schema錛氬搴斿叧緋繪暟鎹簱涓殑schema <li>pkJoin: 瀹氫箟涓涓狿rimaryKeyJoinColumn鏁扮粍錛屾寚瀹氫粠琛ㄧ殑涓婚敭鍒? <li>UniqueConstraints:瀹氫箟涓涓猆niqueConstraint鏁扮粍錛屾寚瀹氶渶瑕佸緩鍞竴綰︽潫鐨勫垪 </li> </ul> <p>涓嬮潰鐨勪唬鐮佽鏄嶤ustomer綾繪槧灝勫埌涓や釜琛紝涓昏〃鍚嶆槸CUSTOMER錛屼粠琛ㄥ悕鏄疌UST_DETAIL錛屼粠琛ㄧ殑涓婚敭鍒楀拰涓昏〃鐨勪富閿垪綾誨瀷鐩稿悓錛屽垪鍚嶄負CUST_ID銆?</p> <div> <pre> <br /> @Entity<br /> @Table(name="CUSTOMER")<br /> @SecondaryTable(name="CUST_DETAIL",pkJoin=@PrimaryKeyJoinColumn(name="CUST_ID"))<br /> public class Customer { ... }<br /> <br /> </pre> </div> </div> <div> <h2>SecondaryTables</h2> <p>褰撲竴涓猠ntity class鏄犲皠鍒頒竴涓富琛ㄥ拰澶氫釜浠庤〃鏃訛紝鐢⊿econdaryTables鏉ュ畾涔夊悇涓粠琛ㄧ殑灞炴с?</p> <p>鍏冩暟鎹睘鎬ц鏄庯細 </p> <ul> <li>value錛?瀹氫箟涓涓猄econdaryTable鏁扮粍錛屾寚瀹氭瘡涓粠琛ㄧ殑灞炴с?</li> </ul> <div> <pre> <br /> @Table(name = "CUSTOMER")<br /> @SecondaryTables( value = {<br /> @SecondaryTable(name = "CUST_NAME", pkJoin = { @PrimaryKeyJoinColumn(name = "STMO_ID", referencedColumnName = "id") }),<br /> @SecondaryTable(name = "CUST_ADDRESS", pkJoin = { @PrimaryKeyJoinColumn(name = "STMO_ID", referencedColumnName = "id") }) })<br /> public class Customer {}<br /> <br /> </pre> </div> </div> <div> <h2>UniqueConstraint</h2> <p>UniqueConstraint瀹氫箟鍦═able鎴朣econdaryTable鍏冩暟鎹噷錛岀敤鏉ユ寚瀹氬緩琛ㄦ椂闇瑕佸緩鍞竴綰︽潫鐨勫垪銆?</p> <p>鍏冩暟鎹睘鎬ц鏄庯細 </p> <ul> <li>columnNames:瀹氫箟涓涓瓧絎︿覆鏁扮粍錛屾寚瀹氳寤哄敮涓綰︽潫鐨勫垪鍚嶃?</li> </ul> <div> <pre> <br /> @Entity<br /> @Table(name="EMPLOYEE",<br /> uniqueConstraints={@UniqueConstraint(columnNames={"EMP_ID", "EMP_NAME"})}<br /> )<br /> public class Employee { ... }<br /> <br /> </pre> </div> </div> <div> <h2>Column</h2> <p>Column鍏冩暟鎹畾涔変簡鏄犲皠鍒版暟鎹簱鐨勫垪鐨勬墍鏈夊睘鎬э細鍒楀悕錛屾槸鍚﹀敮涓錛屾槸鍚﹀厑璁鎬負絀猴紝鏄惁鍏佽鏇存柊絳夈?</p> <p>鍏冩暟鎹睘鎬ц鏄庯細 </p> <ul> <li>name:鍒楀悕銆? <li>unique: 鏄惁鍞竴 <li>nullable: 鏄惁鍏佽涓虹┖ <li>insertable: 鏄惁鍏佽鎻掑叆 <li>updatable: 鏄惁鍏佽鏇存柊 <li>columnDefinition: 瀹氫箟寤鴻〃鏃跺垱寤烘鍒楃殑DDL <li>secondaryTable: 浠庤〃鍚嶃傚鏋滄鍒椾笉寤哄湪涓昏〃涓婏紙榛樿寤哄湪涓昏〃錛夛紝璇ュ睘鎬у畾涔夎鍒楁墍鍦ㄤ粠琛ㄧ殑鍚嶅瓧銆?</li> </ul> <div> <pre> <br /> public class Person {<br /> @Column(name = "PERSONNAME", unique = true, nullable = false, updatable = true)<br /> private String name;<br /> <br /> @Column(name = "PHOTO", columnDefinition = "BLOB NOT NULL", secondaryTable="PER_PHOTO")<br /> private byte[] picture;<br /> <br /> </pre> </div> </div> <div> <h2>JoinColumn</h2> <p>濡傛灉鍦╡ntity class鐨刦ield涓婂畾涔変簡鍏崇郴錛坥ne2one鎴杘ne2many絳夛級錛屾垜浠氳繃JoinColumn鏉ュ畾涔夊叧緋葷殑灞炴с侸oinColumn鐨勫ぇ閮ㄥ垎灞炴у拰Column綾諱技銆?</p> <p>鍏冩暟鎹睘鎬ц鏄庯細 </p> <ul> <li>name:鍒楀悕銆? <li>referencedColumnName:璇ュ垪鎸囧悜鍒楃殑鍒楀悕錛堝緩琛ㄦ椂璇ュ垪浣滀負澶栭敭鍒楁寚鍚戝叧緋誨彟涓绔殑鎸囧畾鍒楋級 <li>unique: 鏄惁鍞竴 <li>nullable: 鏄惁鍏佽涓虹┖ <li>insertable: 鏄惁鍏佽鎻掑叆 <li>updatable: 鏄惁鍏佽鏇存柊 <li>columnDefinition: 瀹氫箟寤鴻〃鏃跺垱寤烘鍒楃殑DDL <li>secondaryTable: 浠庤〃鍚嶃傚鏋滄鍒椾笉寤哄湪涓昏〃涓婏紙榛樿寤哄湪涓昏〃錛夛紝璇ュ睘鎬у畾涔夎鍒楁墍鍦ㄤ粠琛ㄧ殑鍚嶅瓧銆?</li> </ul> <p>涓嬮潰鐨勪唬鐮佽鏄嶤ustom鍜孫rder鏄竴瀵逛竴鍏崇郴銆傚湪Order瀵瑰簲鐨勬槧灝勮〃寤轟竴涓悕涓篊UST_ID鐨勫垪錛岃鍒椾綔涓哄閿寚鍚慍ustom瀵瑰簲琛ㄤ腑鍚嶄負ID鐨勫垪銆?</p> <div> <pre> <br /> public class Custom {<br /> <br /> @OneToOne<br /> @JoinColumn(<br /> name="CUST_ID", referencedColumnName="ID", unique=true, nullable=true, updatable=true)<br /> public order getOrder() {<br /> return order;<br /> }<br /> <br /> </pre> </div> </div> <div> <h2>JoinColumns</h2> <p>濡傛灉鍦╡ntity class鐨刦ield涓婂畾涔変簡鍏崇郴錛坥ne2one鎴杘ne2many絳夛級錛屽茍涓斿叧緋誨瓨鍦ㄥ涓狫oinColumn錛岀敤JoinColumns瀹氫箟澶氫釜JoinColumn鐨勫睘鎬с?</p> <p>鍏冩暟鎹睘鎬ц鏄庯細 </p> <ul> <li>value: 瀹氫箟JoinColumn鏁扮粍錛屾寚瀹氭瘡涓狫oinColumn鐨勫睘鎬с?</li> </ul> <p>涓嬮潰鐨勪唬鐮佽鏄嶤ustom鍜孫rder鏄竴瀵逛竴鍏崇郴銆傚湪Order瀵瑰簲鐨勬槧灝勮〃寤轟袱鍒楋紝涓鍒楀悕涓篊UST_ID錛岃鍒椾綔涓哄閿寚鍚慍ustom瀵瑰簲琛ㄤ腑鍚嶄負ID鐨勫垪,鍙︿竴鍒楀悕涓篊UST_NAME錛岃鍒椾綔涓哄閿寚鍚慍ustom瀵瑰簲琛ㄤ腑鍚嶄負NAME鐨勫垪銆?</p> <div> <pre> <br /> public class Custom {<br /> @OneToOne<br /> @JoinColumns({<br /> @JoinColumn(name="CUST_ID", referencedColumnName="ID"),<br /> @JoinColumn(name="CUST_NAME", referencedColumnName="NAME")<br /> })<br /> public order getOrder() {<br /> return order;<br /> }<br /> <br /> </pre> </div> </div> <div> <h2>Id</h2> <p>澹版槑褰撳墠field涓烘槧灝勮〃涓殑涓婚敭鍒椼俰d鍊肩殑鑾峰彇鏂瑰紡鏈変簲縐嶏細TABLE, SEQUENCE, IDENTITY, AUTO, NONE銆侽racle鍜孌B2鏀寔SEQUENCE錛孲QL Server鍜孲ybase鏀寔IDENTITY,mysql鏀寔AUTO銆傛墍鏈夌殑鏁版嵁搴撻兘鍙互鎸囧畾涓篈UTO錛屾垜浠細鏍規嵁涓嶅悓鏁版嵁搴撳仛杞崲銆侼ONE (榛樿)闇瑕佺敤鎴瘋嚜宸辨寚瀹欼d鐨勫箋傚厓鏁版嵁灞炴ц鏄庯細 </p> <ul> <li>generate():涓婚敭鍊肩殑鑾峰彇綾誨瀷 <li>generator():TableGenerator鐨勫悕瀛楋紙褰揼enerate=GeneratorType.TABLE鎵嶉渶瑕佹寚瀹氳灞炴э級 </li> </ul> <p>涓嬮潰鐨勪唬鐮佸0鏄嶵ask鐨勪富閿垪id鏄嚜鍔ㄥ闀跨殑銆?Oracle鍜孌B2浠庨粯璁ょ殑SEQUENCE鍙栧鹼紝SQL Server鍜孲ybase璇ュ垪寤烘垚IDENTITY錛宮ysql璇ュ垪寤烘垚auto increment銆? </p> <div> <pre> <br /> @Entity<br /> @Table(name = "OTASK")<br /> public class Task {<br /> @Id(generate = GeneratorType.AUTO)<br /> public Integer getId() {<br /> return id;<br /> }<br /> }<br /> <br /> </pre> </div> </div> <div> <h2>IdClass</h2> <p>褰揺ntity class浣跨敤澶嶅悎涓婚敭鏃訛紝闇瑕佸畾涔変竴涓被浣滀負id class銆俰d class蹇呴』絎﹀悎浠ヤ笅瑕佹眰:綾誨繀欏誨0鏄庝負public錛屽茍鎻愪緵涓涓0鏄庝負public鐨勭┖鏋勯犲嚱鏁般傚繀欏誨疄鐜癝erializable鎺ワ紝瑕嗗啓 equals()鍜宧ashCode錛堬級鏂規硶銆俥ntity class鐨勬墍鏈塱d field鍦╥d class閮借瀹氫箟錛屼笖綾誨瀷涓鏍楓?</p> <p>鍏冩暟鎹睘鎬ц鏄庯細 </p> <ul> <li>value: id class鐨勭被鍚?</li> </ul> <p>  </p> <div> <pre> <br /> public class EmployeePK implements java.io.Serializable{<br /> String empName;<br /> Integer empAge;<br /> <br /> public EmployeePK(){}<br /> <br /> public boolean equals(Object obj){ ......}<br /> public int hashCode(){......}<br /> }<br /> <br /> <br /> @IdClass(value=com.acme.EmployeePK.class)<br /> @Entity(access=FIELD)<br /> public class Employee {<br /> @Id String empName;<br /> @Id Integer empAge;<br /> }<br /> <br /> </pre> </div> </div> <div> <h2>MapKey</h2> <p>鍦ㄤ竴瀵瑰錛屽瀵瑰鍏崇郴涓紝鎴戜滑鍙互鐢∕ap鏉ヤ繚瀛橀泦鍚堝璞°傞粯璁ょ敤涓婚敭鍊煎仛key錛屽鏋滀嬌鐢ㄥ鍚堜富閿紝鍒欑敤id class鐨勫疄渚嬪仛key錛屽鏋滄寚瀹氫簡name灞炴э紝灝辯敤鎸囧畾鐨刦ield鐨勫煎仛key銆?</p> <p>鍏冩暟鎹睘鎬ц鏄庯細 </p> <ul> <li>name: 鐢ㄦ潵鍋歬ey鐨刦ield鍚嶅瓧 </li> </ul> <p>涓嬮潰鐨勪唬鐮佽鏄嶱erson鍜孊ook涔嬮棿鏄竴瀵瑰鍏崇郴銆侾erson鐨刡ooks瀛楁鏄疢ap綾誨瀷錛岀敤Book鐨刬sbn瀛楁鐨勫間綔涓篗ap鐨刱ey銆?</p> <div> <pre> <br /> @Table(name = "PERSON")<br /> public class Person {<br /> <br /> @OneToMany(targetEntity = Book.class, cascade = CascadeType.ALL, mappedBy = "person")<br /> @MapKey(name = "isbn")<br /> private Map books = new HashMap();<br /> }<br /> <br /> </pre> </div> </div> <div> <h2>OrderBy</h2> <p>鍦ㄤ竴瀵瑰錛屽瀵瑰鍏崇郴涓紝鏈夋椂鎴戜滑甯屾湜浠庢暟鎹簱鍔犺澆鍑烘潵鐨勯泦鍚堝璞℃槸鎸変竴瀹氭柟寮忔帓搴忕殑錛岃繖鍙互閫氳繃OrderBy鏉ュ疄鐜幫紝榛樿鏄寜瀵硅薄鐨勪富閿崌搴忔帓鍒椼?</p> <p>鍏冩暟鎹睘鎬ц鏄庯細 </p> <ul> <li>value: 瀛楃涓茬被鍨嬶紝鎸囧畾鎺掑簭鏂瑰紡銆傛牸寮忎負"fieldName1 [ASC|DESC],fieldName2 [ASC|DESC],......",鎺掑簭綾誨瀷鍙互涓嶆寚瀹氾紝榛樿鏄疉SC銆?</li> </ul> <p>涓嬮潰鐨勪唬鐮佽鏄嶱erson鍜孊ook涔嬮棿鏄竴瀵瑰鍏崇郴銆傞泦鍚坆ooks鎸夌収Book鐨刬sbn鍗囧簭錛宯ame闄嶅簭鎺掑垪銆?</p> <div> <pre> <br /> @Table(name = "MAPKEY_PERSON")<br /> public class Person {<br /> <br /> @OneToMany(targetEntity = Book.class, cascade = CascadeType.ALL, mappedBy = "person")<br /> @OrderBy(name = "isbn ASC, name DESC")<br /> private List books = new ArrayList();<br /> }<br /> <br /> </pre> </div> </div> <div> <h2>PrimaryKeyJoinColumn</h2> <p>鍦ㄤ笁縐嶆儏鍐典笅浼氱敤鍒癙rimaryKeyJoinColumn銆?</p> <ul> <li>緇ф壙銆? <li>entity class鏄犲皠鍒頒竴涓垨澶氫釜浠庤〃銆備粠琛ㄦ牴鎹富琛ㄧ殑涓婚敭鍒楋紙鍒楀悕涓簉eferencedColumnName鍊肩殑鍒楋級錛屽緩绔嬩竴涓被鍨嬩竴鏍風殑涓婚敭鍒楋紝鍒楀悕鐢眓ame灞炴у畾涔夈? <li>one2one鍏崇郴錛屽叧緋葷淮鎶ょ鐨勪富閿綔涓哄閿寚鍚戝叧緋昏緇存姢绔殑涓婚敭錛屼笉鍐嶆柊寤轟竴涓閿垪銆?</li> </ul> <p>  </p> <p>鍏冩暟鎹睘鎬ц鏄庯細 </p> <ul> <li>name:鍒楀悕銆? <li>referencedColumnName:璇ュ垪寮曠敤鍒楃殑鍒楀悕 <li>columnDefinition: 瀹氫箟寤鴻〃鏃跺垱寤烘鍒楃殑DDL </li> </ul> <p>涓嬮潰鐨勪唬鐮佽鏄嶤ustomer鏄犲皠鍒頒袱涓〃錛屼富琛–USTOMER,浠庤〃CUST_DETAIL錛屼粠琛ㄩ渶瑕佸緩绔嬩富閿垪CUST_ID錛岃鍒楀拰涓昏〃鐨勪富閿垪id闄や簡鍒楀悕涓嶅悓錛屽叾浠栧畾涔変竴鏍楓?</p> <div> <pre> <br /> @Entity<br /> @Table(name="CUSTOMER")<br /> @SecondaryTable(name="CUST_DETAIL",pkJoin=@PrimaryKeyJoinColumn(name="CUST_ID"錛宺eferencedColumnName="id"))<br /> public class Customer { <br /> @Id(generate = GeneratorType.AUTO)<br /> public Integer getId() {<br /> return id;<br /> }<br /> }<br /> <br /> </pre> </div> <p>涓嬮潰鐨勪唬鐮佽鏄嶦mployee鍜孍mployeeInfo鏄竴瀵逛竴鍏崇郴錛孍mployee鐨勪富閿垪id浣滀負澶栭敭鎸囧悜EmployeeInfo鐨勪富閿垪INFO_ID銆?</p> <div> <pre> <br /> @Table(name = "Employee")<br /> public class Employee {<br /> @OneToOne<br /> @PrimaryKeyJoinColumn(name = "id", referencedColumnName="INFO_ID")<br /> EmployeeInfo info;<br /> }<br /> <br /> </pre> </div> </div> <div> <h2>PrimaryKeyJoinColumns</h2> <p>濡傛灉entity class浣跨敤浜嗗鍚堜富閿紝鎸囧畾鍗曚釜PrimaryKeyJoinColumn涓嶈兘婊¤凍瑕佹眰鏃訛紝鍙互鐢≒rimaryKeyJoinColumns鏉ュ畾涔夊涓狿rimaryKeyJoinColumn銆?</p> <p>鍏冩暟鎹睘鎬ц鏄庯細 </p> <ul> <li>value: 涓涓狿rimaryKeyJoinColumn鏁扮粍錛屽寘鍚墍鏈塒rimaryKeyJoinColumn銆?</li> </ul> <p>涓嬮潰鐨勪唬鐮佽鏄庝簡Employee鍜孍mployeeInfo鏄竴瀵逛竴鍏崇郴銆備粬浠兘浣跨敤澶嶅悎涓婚敭錛屽緩琛ㄦ椂闇瑕佸湪Employee琛ㄥ緩绔嬩竴涓閿紝浠嶦mployee鐨勪富閿垪id,name鎸囧悜EmployeeInfo鐨勪富閿垪INFO_ID鍜孖NFO_NAME. </p> <div> <pre> <br /> @Entity<br /> @IdClass(EmpPK.class)<br /> @Table(name = "EMPLOYEE")<br /> public class Employee {<br /> <br /> private int id;<br /> <br /> private String name;<br /> <br /> private String address;<br /> <br /> @OneToOne(cascade = CascadeType.ALL)<br /> @PrimaryKeyJoinColumns({<br /> @PrimaryKeyJoinColumn(name="id", referencedColumnName="INFO_ID"),<br /> @PrimaryKeyJoinColumn(name="name" , referencedColumnName="INFO_NAME")})<br /> EmployeeInfo info;<br /> }<br /> <br /> @Entity<br /> @IdClass(EmpPK.class)<br /> @Table(name = "EMPLOYEE_INFO")<br /> public class EmployeeInfo {<br /> <br /> @Id<br /> @Column(name = "INFO_ID")<br /> private int id;<br /> <br /> @Id<br /> @Column(name = "INFO_NAME")<br /> private String name;<br /> }<br /> <br /> </pre> </div> </div> <div> <h2>Transient</h2> <p>Transient鐢ㄦ潵娉ㄩ噴entity鐨勫睘鎬э紝鎸囧畾鐨勮繖浜涘睘鎬т笉浼氳鎸佷箙鍖栵紝涔熶笉浼氫負榪欎簺灞炴у緩琛ㄣ?</p> <div> <pre> <br /> @Transient<br /> private String name;<br /> <br /> </pre> </div> </div> <div> <h2>Version</h2> <p>Version鎸囧畾瀹炰綋綾誨湪涔愯浜嬪姟涓殑version灞炴с傚湪瀹炰綋綾婚噸鏂扮敱EntityManager綆$悊騫朵笖鍔犲叆鍒頒箰瑙備簨鍔′腑鏃訛紝淇濊瘉瀹屾暣鎬с傛瘡涓涓被鍙兘鏈変竴涓睘鎬ц鎸囧畾涓簐ersion錛寁ersion灞炴у簲璇ユ槧灝勫埌瀹炰綋綾葷殑涓昏〃涓娿?</p> <p>涓嬮潰鐨勪唬鐮佽鏄巚ersionNum灞炴т綔涓鴻繖涓被鐨剉ersion錛屾槧灝勫埌鏁版嵁搴撲腑涓昏〃鐨勫垪鍚嶆槸OPTLOCK銆?</p> <div> <pre> <br /> @Version<br /> @Column("OPTLOCK")<br /> protected int getVersionNum() { return versionNum; }<br /> <br /> </pre> </div> </div> <div> <h2>Lob</h2> <p>Lob鎸囧畾涓涓睘鎬т綔涓烘暟鎹簱鏀寔鐨勫ぇ瀵硅薄綾誨瀷鍦ㄦ暟鎹簱涓瓨鍌ㄣ備嬌鐢↙obType榪欎釜鏋氫婦鏉ュ畾涔塋ob鏄簩榪涘埗綾誨瀷榪樻槸瀛楃綾誨瀷銆?</p> <p>LobType鏋氫婦綾誨瀷璇存槑錛?</p> <ul> <li>BLOB 浜岃繘鍒跺ぇ瀵硅薄錛孊yte[]鎴栬匰erializable鐨勭被鍨嬪彲浠ユ寚瀹氫負BLOB銆? <li>CLOB 瀛楃鍨嬪ぇ瀵硅薄錛宑har[]銆丆haracter[]鎴朣tring綾誨瀷鍙互鎸囧畾涓篊LOB銆?</li> </ul> <p>鍏冩暟鎹睘鎬ц鏄庯細 </p> <ul> <li>fetch錛?瀹氫箟榪欎釜瀛楁鏄痩azy loaded榪樻槸eagerly fetched銆傛暟鎹被鍨嬫槸FetchType鏋氫婦錛岄粯璁や負LAZY,鍗砽azy loaded. <li>type錛?瀹氫箟榪欎釜瀛楁鍦ㄦ暟鎹簱涓殑JDBC鏁版嵁綾誨瀷銆傛暟鎹被鍨嬫槸LobType鏋氫婦錛岄粯璁や負BLOB銆?</li> </ul> <p>涓嬮潰鐨勪唬鐮佸畾涔変簡涓涓狟LOB綾誨瀷鐨勫睘鎬у拰涓涓狢LOB綾誨瀷鐨勫睘鎬с?</p> <div> <pre> <br /> @Lob<br /> @Column(name="PHOTO" columnDefinition="BLOB NOT NULL")<br /> protected JPEGImage picture;<br /> <br /> @Lob(fetch=EAGER, type=CLOB)<br /> @Column(name="REPORT")<br /> protected String report;<br /> <br /> </pre> </div> </div> <div> <h2>JoinTable</h2> <p>JoinTable鍦╩any-to-many鍏崇郴鐨勬墍鏈夎呬竴杈瑰畾涔夈傚鏋滄病鏈夊畾涔塉oinTable錛屼嬌鐢↗oinTable鐨勯粯璁ゅ箋?</p> <p>鍏冩暟鎹睘鎬ц鏄庯細 </p> <ul> <li>table:榪欎釜join table鐨凾able瀹氫箟銆? <li>joinColumns:瀹氫箟鎸囧悜鎵鏈夎呬富琛ㄧ殑澶栭敭鍒楋紝鏁版嵁綾誨瀷鏄疛oinColumn鏁扮粍銆? <li>inverseJoinColumns:瀹氫箟鎸囧悜闈炴墍鏈夎呬富琛ㄧ殑澶栭敭鍒楋紝鏁版嵁綾誨瀷鏄疛oinColumn鏁扮粍銆?</li> </ul> <p>涓嬮潰鐨勪唬鐮佸畾涔変簡涓涓繛鎺ヨ〃CUST鍜孭HONE鐨刯oin table銆俲oin table鐨勮〃鍚嶆槸CUST_PHONE錛屽寘鍚袱涓閿紝涓涓閿槸CUST_ID錛屾寚鍚戣〃CUST鐨勪富閿甀D錛屽彟涓涓閿槸PHONE_ID錛屾寚鍚戣〃PHONE鐨勪富閿甀D銆?</p> <div> <pre> <br /> @JoinTable(<br /> table=@Table(name=CUST_PHONE),<br /> joinColumns=@JoinColumn(name="CUST_ID", referencedColumnName="ID"),<br /> inverseJoinColumns=@JoinColumn(name="PHONE_ID", referencedColumnName="ID")<br /> )<br /> <br /> </pre> </div> </div> <div> <h2>TableGenerator</h2> <p>TableGenerator瀹氫箟涓涓富閿肩敓鎴愬櫒錛屽湪Id榪欎釜鍏冩暟鎹殑generate錛漈ABLE鏃訛紝generator灞炴т腑鍙互浣跨敤鐢熸垚鍣ㄧ殑鍚嶅瓧銆傜敓鎴愬櫒鍙互鍦ㄧ被銆佹柟娉曟垨鑰呭睘鎬т笂瀹氫箟銆?</p> <p>鐢熸垚鍣ㄦ槸涓哄涓疄浣撶被鎻愪緵榪炵畫鐨処D鍊肩殑琛紝姣忎竴琛屼負涓涓被鎻愪緵ID鍊鹼紝ID鍊奸氬父鏄暣鏁般?</p> <p>鍏冩暟鎹睘鎬ц鏄庯細 </p> <ul> <li>name:鐢熸垚鍣ㄧ殑鍞竴鍚嶅瓧錛屽彲浠ヨId鍏冩暟鎹嬌鐢ㄣ? <li>table:鐢熸垚鍣ㄧ敤鏉ュ瓨鍌╥d鍊肩殑Table瀹氫箟銆? <li>pkColumnName:鐢熸垚鍣ㄨ〃鐨勪富閿悕縐般? <li>valueColumnName:鐢熸垚鍣ㄨ〃鐨処D鍊肩殑鍒楀悕縐般? <li>pkColumnValue:鐢熸垚鍣ㄨ〃涓殑涓琛屾暟鎹殑涓婚敭鍊箋? <li>initialValue:id鍊肩殑鍒濆鍊箋? <li>allocationSize:id鍊肩殑澧為噺銆?</li> </ul> <p>涓嬮潰鐨勪唬鐮佸畾涔変簡涓や釜鐢熸垚鍣╡mpGen鍜宎ddressGen錛岀敓鎴愬櫒鐨勮〃鏄疘D_GEN銆?</p> <div> <pre> <br /> @Entity public class Employee {<br /> ...<br /> @TableGenerator(name="empGen",<br /> table=@Table(name="ID_GEN"),<br /> pkColumnName="GEN_KEY",<br /> valueColumnName="GEN_VALUE",<br /> pkColumnValue="EMP_ID",<br /> allocationSize=1)<br /> @Id(generate=TABLE, generator="empGen")<br /> public int id;<br /> ...<br /> }<br /> <br /> @Entity public class Address {<br /> ...<br /> @TableGenerator(name="addressGen",<br /> table=@Table(name="ID_GEN"),<br /> pkColumnValue="ADDR_ID")<br /> @Id(generate=TABLE, generator="addressGen")<br /> public int id;<br /> ...<br /> }<br /> <br /> </pre> </div> </div> <div> <h2>SequenceGenerator</h2> <p>SequenceGenerator瀹氫箟涓涓富閿肩敓鎴愬櫒錛屽湪Id榪欎釜鍏冩暟鎹殑generator灞炴т腑鍙互浣跨敤鐢熸垚鍣ㄧ殑鍚嶅瓧銆傜敓鎴愬櫒鍙互鍦ㄧ被銆佹柟娉曟垨鑰呭睘鎬т笂瀹氫箟銆傜敓鎴愬櫒鏄暟鎹簱鏀寔鐨剆equence瀵硅薄銆?</p> <p>鍏冩暟鎹睘鎬ц鏄庯細 </p> <ul> <li>name:鐢熸垚鍣ㄧ殑鍞竴鍚嶅瓧錛屽彲浠ヨId鍏冩暟鎹嬌鐢ㄣ? <li>sequenceName:鏁版嵁搴撲腑錛宻equence瀵硅薄鐨勫悕縐般傚鏋滀笉鎸囧畾錛屼細浣跨敤鎻愪緵鍟嗘寚瀹氱殑榛樿鍚嶇О銆? <li>initialValue:id鍊肩殑鍒濆鍊箋? <li>allocationSize:id鍊肩殑澧為噺銆?</li> </ul> <p>涓嬮潰鐨勪唬鐮佸畾涔変簡涓涓嬌鐢ㄦ彁渚涘晢榛樿鍚嶇О鐨剆equence鐢熸垚鍣ㄣ?</p> <div> <pre> <br /> @SequenceGenerator(name="EMP_SEQ", allocationSize=25) <br /> <br /> </pre> </div> </div> <div> <h2>DiscriminatorColumn</h2> <p>DiscriminatorColumn瀹氫箟鍦ㄤ嬌鐢⊿INGLE_TABLE鎴朖OINED緇ф壙絳栫暐鐨勮〃涓尯鍒笉緇ф壙灞傛鐨勫垪銆?</p> <p>鍏冩暟鎹睘鎬ц鏄庯細 </p> <ul> <li>name:column鐨勫悕瀛椼傞粯璁ゅ間負TYPE銆? <li>columnDefinition:鐢熸垚DDL鐨剆ql鐗囨柇銆? <li>length:String綾誨瀷鐨刢olumn鐨勯暱搴︼紝鍏朵粬綾誨瀷浣跨敤榛樿鍊?0銆?</li> </ul> <p>涓嬮潰鐨勪唬鐮佸畾涔変簡涓涓垪鍚嶄負DISC錛岄暱搴︿負20鐨凷tring綾誨瀷鐨勫尯鍒垪銆?</p> <div> <pre> <br /> @Entity<br /> @Table(name="CUST")<br /> @Inheritance(strategy=SINGLE_TABLE,<br /> discriminatorType=STRING,<br /> discriminatorValue="CUSTOMER")<br /> @DiscriminatorColumn(name="DISC", length=20)<br /> public class Customer { ... }</pre> </div> </div> <br /> <img src ="http://www.tkk7.com/luluyanglu/aggbug/259895.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/luluyanglu/" target="_blank">澶ч奔</a> 2009-03-15 22:41 <a href="http://www.tkk7.com/luluyanglu/archive/2009/03/15/259895.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <p>感谢您访问我们的网站,您可能还对以下资源感兴趣:</p> <a href="http://www.tkk7.com/" title="亚洲av成人片在线观看">亚洲av成人片在线观看</a> <div class="friend-links"> </div> </div> </footer> 主站蜘蛛池模板: <a href="http://www456788.com" target="_blank">久久狠狠躁免费观看2020</a>| <a href="http://www-171234.com" target="_blank">亚洲av午夜国产精品无码中文字</a>| <a href="http://726kxw.com" target="_blank">222www在线观看免费</a>| <a href="http://ninidian.com" target="_blank">毛茸茸bbw亚洲人</a>| <a href="http://gttest5.com" target="_blank">香蕉免费在线视频</a>| <a href="http://bjbf99.com" target="_blank">精品亚洲综合在线第一区</a>| <a href="http://by6635.com" target="_blank">皇色在线免费视频</a>| <a href="http://www96008.com" target="_blank">亚洲成AV人片在线播放无码</a>| <a href="http://fenglufzjx.com" target="_blank">国产一区二区三区免费观在线</a>| <a href="http://www-9970.com" target="_blank">在线A亚洲老鸭窝天堂</a>| <a href="http://btintemet.com" target="_blank">精品一区二区三区免费观看 </a>| <a href="http://726kxw.com" target="_blank">4480yy私人影院亚洲</a>| <a href="http://2255325.com" target="_blank">特级毛片全部免费播放a一级</a>| <a href="http://dazngt.com" target="_blank">国产免费黄色大片</a>| <a href="http://eldadhagar.com" target="_blank">一区二区三区免费在线视频</a>| <a href="http://dt677.com" target="_blank">亚洲国产精品专区在线观看</a>| <a href="http://zisewang.com" target="_blank">国产区在线免费观看</a>| <a href="http://cjsyw123.com" target="_blank">国产精品亚洲一区二区三区在线 </a>| <a href="http://lanchenews.com" target="_blank">亚洲最新在线视频</a>| <a href="http://zuche001.com" target="_blank">97在线线免费观看视频在线观看 </a>| <a href="http://apguangyu.com" target="_blank">69影院毛片免费观看视频在线</a>| <a href="http://857434.com" target="_blank">亚洲欧洲自拍拍偷综合</a>| <a href="http://www84847.com" target="_blank">特级做A爰片毛片免费69</a>| <a href="http://selaohu.com" target="_blank">亚洲av乱码中文一区二区三区</a>| <a href="http://selaohu.com" target="_blank">亚洲狠狠爱综合影院婷婷</a>| <a href="http://my533.com" target="_blank">国产在线观看xxxx免费</a>| <a href="http://wwwly6080.com" target="_blank">色婷婷亚洲十月十月色天</a>| <a href="http://hnlchb.com" target="_blank">97视频热人人精品免费</a>| <a href="http://cqyouyongpx.com" target="_blank">久久精品熟女亚洲av麻豆</a>| <a href="http://www132126.com" target="_blank">老司机亚洲精品影视www</a>| <a href="http://bovch.com" target="_blank">亚洲一区二区在线免费观看</a>| <a href="http://whspmd.com" target="_blank">亚洲sss综合天堂久久久</a>| <a href="http://gztzbj.com" target="_blank">在线永久免费的视频草莓</a>| <a href="http://51708695.com" target="_blank">中文字幕无码成人免费视频</a>| <a href="http://45-po.com" target="_blank">亚洲人成色77777在线观看</a>| <a href="http://52099jy.com" target="_blank">亚洲成A人片在线观看无码3D</a>| <a href="http://szyxfhm.com" target="_blank">久久久久国色AV免费观看</a>| <a href="http://286513.com" target="_blank">亚洲最大中文字幕</a>| <a href="http://18888kj.com" target="_blank">又粗又黄又猛又爽大片免费</a>| <a href="http://65123456.com" target="_blank">免费人成黄页在线观看日本</a>| <a href="http://sdhuamo.com" target="_blank">在线综合亚洲中文精品</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>