我想知道是什么样的区别MappedSuperclass
和Entity Abstract Class
当一个人想要从一个超类派生Hibernate
。我知道这Hibernate
不会在数据库中为表创建表MappedSuperclass
。我在JavaEE
doc中读到
“抽象实体就像具体实体,但是无法实例化” 。由于无法实例化它们,因此我推断数据库中 没有匹配的表 。我对吗?
如果是这样,使用a MappedSuperclass
和an 之间实际上有什么区别,并且Entity Abstract Class
在每种情况下对软件和数据库有什么影响?
MappedSuper类将继承用于字段和代码的重用。例如,如果您希望所有实体都具有Long id
和Long version
字段,则可以使它们全部扩展一个包含这两个字段以及它们的getter,setter等BaseEntity
注释的类MappedSuperclass
。但是,您永远不会拥有一个具有关联的实体与BaseEntity:关联将始终与BaseEntity的特定子类关联。
父实体用于“实体多态性”。例如,您可以想象有两种Message
:an EmailMessage
和a
SmsMessage
。两者都将包含源,目标和主体。但是,EmailMessage将具有电子邮件地址和主题,而SmsMessage将具有电话号码。
您可以想象有一个Person
实体,其中包含已发送消息的集合,类型为Message
。该集合实际上将包含EmailMessage和SmsMessage的实例。Hibernate将根据用于继承映射的继承策略来决定实例化哪个实例:
问题内容: 我的数据模型代表法人实体,例如企业或个人。两者都是纳税实体,都具有TaxID,电话号码和邮件地址的集合。 我有一个Java模型,其中有两个扩展抽象类的具体类。抽象类具有两个具体类共有的属性和集合。 我正在 MySQL* 数据库上使用 Hibernate JPA注释,其类如下: * 问题是,和对象需要参考他们的主人,这是一个。hibernate抱怨: 看来这将是一个相当普遍的Java继承
问题内容: 当我使用@Entity注释类并尝试解决依赖关系时,我可以在两个不同的包javax.persistence.Entity和org.hibernate.annotations.Entity中选择包。 javax包是JPA的实体注释,但是为什么会有休眠的实体注释,它与JPA的注释有区别?仅仅是允许定义更多属性的扩展吗? 问题答案: 具有一些尚未标准化的额外属性。仅当直接使用hibernate
问题内容: 通用实体,超类: pojo: 我尝试使用那些注释:@ AttributeOverride,@ Id等,但是它不起作用。你能帮助我吗?我想覆盖属性“ id”以通过pojo / table指定另一个列名和一个序列。最好的方法是什么? 问题答案: 试试这个,代替
快速总结我想要实现的目标。请给出实施或设计建议:) 我有两个表:用户,图像。在UserDO中,我希望保留一组所有用户的图像,以及单个图像,即用户的肖像(在我的示例中,该组将包括肖像): 在ImageDO中,我有一个userid作为外键来记录哪个用户上传了图像。但是它没有布尔值,因为认为一个用户可能会上传许多图像,但只有一个是肖像。 有什么方法可以实现这一点吗?或者我需要维护另一个表(例如,Port
问题内容: 我需要预先将没有实现接口的枚举映射到现有数据库,该数据库使用将该枚举存储在与所有者类相同的表中。 在这种情况下应如何处理映射?持久化到数据库不会改变,因为实现该接口的所有枚举都将具有不同的值,但是我不确定应如何从数据库中检索对象(我是否需要自定义映射器,它将尝试实例化一个使用指定的enum类进行枚举吗?Hibernate是否本身支持此功能?)。 问题答案: 可以创建一个自定义(例如th
问题内容: Hibernate提供的注释支持使用或两种类型的映射。当我们使用映射时,它使用的“名称” 而不是Enum 的表示形式。在数据库列仅包含一个字符的情况下,这是一个问题。例如,我有以下枚举: 当我坚持枚举使用,即休眠尝试在数据库中存储的值是开放的。但是,我的数据库列仅包含一个字符,因此会引发异常。 克服这个问题的一个办法是改变枚举类型持有单个字符(如,代替,)。但是,这降低了可读性。有什么