aşağıdaki "kök" varlık (hazırda bekletme özgü parçalar yorumlandı) adres:ayıran JPA varlıkları ince ayarlar
@Entity
//@GenericGenerator(name="system-uuid",strategy="org.hibernate.id.UUIDGenerator")
public class Node extends PersistentEntity {
private UUID id;
private String name;
private String displayName;
@Id
@GeneratedValue
//@GeneratedValue(generator="system-uuid") //instead of above line
//@Type(type = "pg-uuid")
public UUID getId() { return id; }
public String getName() { return name; }
public String getDisplayName() { return displayName; }
//stuff omitted
}
Bunun 6 AS JBoss üzerinde dağıtılan bir kalıcılık bağlamın parçası (3.6 hazırda bekletme) veritabanı için PostgreSQL 9'u kullanarak (en son JDBC4 sürücüsünü kullanarak). PostgreSQL'in kendi uuid sütun türü vardır. Bu, düzgün bir şekilde kullanılabilecek bazı hazırda özgü eşlemelerin kullanılmasını gerektirir (yukarıdaki kodda yorumlanmıştır) - aksi halde hazırda bekletme biçimi UUID alanını BINARY ile eşlemeye çalışır, sonra PostgreSQL lehçesi BINARY'ı desteklemez (görünüşe göre postgre, ikili ve hazırda bekletilen devleri saklamanın iki yolu vardır) ve her şey patlar. Yukarıdaki satırı etkin duruma
çalışan kod üretir, ama bu hazırda üzerinde derleme zamanı bağımlılığı beni zorlar - ı yerine önleyeceğini.
karışımı içine hbm.xml dosyası eklemek çalışırken ve dosya ve ek açıklamalardan gelen verileri birleştirmek değil persistence.xml onu referans fakat sadece ek açıklamalar yok sayar:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="package">
<class name="Node">
<id name="id" type="pg-uuid">
<generator class="org.hibernate.id.UUIDGenerator"/>
</id>
</class>
</hibernate-mapping>
i can "kabartmak "gibi herhangi bir ekstra varlıkları ekleyerek, bu fazladan 2 özelliklerini ekleyerek kadar dosya, ama (hangi Düğüm sınıf çalışmalarını işaret) bunu bile:
@Entity
public class Host extends Node {
//fields, getters, fluff
}
i aşağıdaki istisna olsun:
hazırda beriorg.hibernate.DuplicateMappingException: Duplicate class/entity mapping Node
Düğüm iki kez "bulur". Bunun etrafında zarif bir yolu var mı? İdeal olarak, Node, hazırda bekletilen özelliklere gereksinim duyacağım tek sınıftır ve sınıfların büyük bir hiyerarşisinin kökü olacaktır. Hazırda bekletme bağımlılıklarını hazırda beklemekten veya hbm.xml dosyasında tamamen eşleme yapmayı tercih ederim. tamlık hatırına buraya kullanarak persistence.xml dosya im var:
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="2.0">
<persistence-unit name="myPU" transaction-type="JTA">
<jta-data-source>java:/my-postgresql-DS</jta-data-source>
<mapping-file>META-INF/hbm.xml</mapping-file>
<!-- shouldnt need to list classes here since this is deployed -->
<!-- in the same jar as the classes and scanning should work -->
<validation-mode>AUTO</validation-mode>
<properties>
<property name="hibernate.hbm2ddl.auto" value="create-drop"/>
</properties>
</persistence-unit>
</persistence>
Ben "ile JPA Java Sebat" (JPA 2.0 Paket) kontrol (en azından JPA 2.0) yapılamaz olduğunu, ancak UUID hakkında hiçbir şey söylemez, Bu yüzden henüz JPA tarafından desteklenmediklerini varsayalım. – esaj
en azından, serileştirilebilir olan her şeyin desteklendiği (ikili veriye dönüştürülecek) anlamda desteklenir. ama PostgreSQL + Hazırda Bekletme ile bile, – radai