Ayrıca iki farklı kalıcı birimler kullanırsanız alt sınıfları kullanmadan yapabilirsiniz.
Her kalıcı birim benzersiz bir eşleşme kümesi belirtebilir (tablo adı da dahil). Bunu başarmanın bir yolu, iki orm.xml dosyası oluşturmaktır. persistence.xml olarak böyle bir şey gerekir:
orm-1.xml içinde Sonra
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
version="1.0">
<persistence-unit name="mapping-1">
. . .
<mapping-file>orm-1.xml</mapping-file>
. . .
</persistence-unit>
<persistence-unit name="mapping-2">
. . .
<mapping-file>orm-2.xml</mapping-file>
. . .
</persistence-unit>
</persistence>
:
<?xml version="1.0" encoding="UTF-8"?>
<entity-mappings xmlns="http://java.sun.com/xml/ns/persistence/orm"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm orm_1_0.xsd"
version="1.0">
<package>mypackage</package>
<entity name="myEntity" class="myClass">
<table name="TABLE1">
</table>
</entity>
</entity-mappings>
Ve orm-2.xml içinde
:
<?xml version="1.0" encoding="UTF-8"?>
<entity-mappings xmlns="http://java.sun.com/xml/ns/persistence/orm"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm orm_1_0.xsd"
version="1.0">
<package>mypackage</package>
<entity name="myEntity" class="myClass">
<table name="TABLE2">
</table>
</entity>
</entity-mappings>
Sen Her PersistenceUnit için ayrı bir EntityManagerFactory oluşturmanız gerekir (muhtemelen sizin istediğinizi değil), ancak aynı sınıfı farklı veritabanlarında kullanmak istiyorsanız (farklı tablo isimleriyle) bu bir yol olacaktır.
Çalışıyor, teşekkürler! Ancak, Toplink için TABLE_PER_CLASS desteklenmiyor. @mappedSuperClass yöntemini denedim ve aynı zamanda çalışıyor. –
Inheritance vs MappedSuperClass hakkında belirsiz olanlar için, burada çok iyi tanımlanmış ve karşılaştırılmıştır: http://stackoverflow.com/a/9669719/2278186 – SatA