Można również zrobić to bez użycia podklasy jeśli używasz dwóch różnych jednostek wytrwałości.
Każda jednostka trwałości może określać unikalny zestaw odwzorowań (w tym nazwę tabeli). Jednym ze sposobów osiągnięcia tego jest utworzenie dwóch plików orm.xml. W persistence.xml trzeba coś takiego:
<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>
Następnie w ciągu ORM-1.xml:
<?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>
A w ciągu ORM-2.xml:
<?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>
Ty Będziesz musiał utworzyć osobny EntityManagerFactory dla każdej PersistenceUnit (prawdopodobnie nie tego, czego chcesz), ale jeśli chciałbyś użyć tej samej klasy w różnych bazach danych (z różnymi nazwami tabel), byłby to właściwy sposób.
To działa, dzięki! Jednak w przypadku Toplink funkcja TABLE_PER_CLASS nie jest obsługiwana. Próbowałem metody @mappedSuperClass i działa również. –
Dla każdego, kto nie ma pewności co do dziedziczenia w porównaniu z MappedSuperClass, są one bardzo dobrze opisane i porównane tutaj: http://stackoverflow.com/a/9669719/2278186 – SatA