2014-02-21 40 views
0

我是EJB JPA的新手。 我在@Inheritance與父母和孩子混淆。JPA @父母與子女的繼承

@Entity 
@Table(name = "owner", catalog = "estate") 
@Inheritance(strategy = InheritanceType.SINGLE_TABLE) 
@DiscriminatorColumn(name="ownerType",discriminatorType=DiscriminatorType.STRING) 
@DiscriminatorValue("owner") 
public class Owner extends UUIDSupport implements 

UserDetails,java.io.Serializable{ 
.... 
} 

@Entity 
@DiscriminatorValue("ownerInCommittee") 
public class OwnerInCommittee extends Owner { 
.... 
} 

CREATE TABLE `owner` (
    `id` varchar(32) COLLATE utf8_unicode_ci NOT NULL, 
    `password` varchar(64) COLLATE utf8_unicode_ci DEFAULT NULL, 
    `username` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL, 
    `idCard` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL, 
    `phone` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL, 
    `email` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL, 
    `duty` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL, // OwnerInCommittee 
    `ownerType` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; 

現在我想在DB中找到'所有者',而不是將其更改爲'OwnerInCommittee'。 因爲java不能強制將父母更改爲孩子。 我應該在DB中找到'owner',將屬性複製到新的'OwnerInCommittee'中,而不是

刪除DB中的所有者。之後,PERSIST新的「所有者委員會」。

有沒有更好的方法?

+0

請參閱http://viralpatel.net/blogs/hibernate-inheritence-table-per-hierarchy-mapping/ –

回答

0

在純Java中沒有更好的方法。你當然可以更新數據庫中的DiscriminatorColumn列,但它似乎有點「哈克」。這裏是對類似問題的解決方案; How to change Entity type in JPA?