2014-02-21 205 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?