Bạn cũng có thể làm điều này mà không sử dụng lớp con nếu bạn sử dụng hai đơn vị kiên trì khác nhau.
Mỗi đơn vị lưu giữ có thể chỉ định một bộ ánh xạ duy nhất (bao gồm cả tên bảng). Một cách để đạt được điều này là tạo hai tệp orm.xml. Trong persistence.xml bạn sẽ cần một cái gì đó như thế này:
<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>
Sau đó, trong vòng 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>
Và trong vòng 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>
Bạn sẽ cần phải tạo một EntityManagerFactory riêng biệt cho mỗi PersistenceUnit (có thể không phải là những gì bạn muốn), nhưng nếu bạn muốn sử dụng cùng một lớp trên các cơ sở dữ liệu khác nhau (với các tên bảng khác nhau) thì đây sẽ là một cách để đi.
Nó hoạt động, Cảm ơn! Tuy nhiên, đối với Toplink, TABLE_PER_CLASS không được hỗ trợ. Tôi đã thử phương thức @mappedSuperClass và nó cũng hoạt động tốt. –
Đối với bất kỳ ai không chắc chắn về Inheritance vs MappedSuperClass, chúng được mô tả và so sánh rất tốt ở đây: http://stackoverflow.com/a/9669719/2278186 – SatA