【问题标题】:JPA @Inheritance with parent and childJPA @父母与孩子的继承
【发布时间】:2014-02-21 10:03:20
【问题描述】:

我是 EJB JPA 的新手。 我在@Inheritance 中对父母和孩子感到困惑。

@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;

现在我想在数据库中找到“所有者”,而不是将其更改为“OwnerInCommittee”。 因为 java 不能强制将父级更改为子级。 如果我在 DB 中找到“所有者”,请将属性复制到新的“OwnerInCommittee”中,而不是

删除数据库中的所有者。之后坚持新的“OwnerInCommittee”。

有没有更好的办法?

【问题讨论】:

标签: java hibernate jpa ejb


【解决方案1】:

在纯 Java 中没有更好的方法。您当然可以更新数据库中的 DiscriminatorColumn 列,但它似乎有点“hacky”。这是一个类似问题的解决方案; How to change Entity type in JPA?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多