当前位置: 首页 > 知识库问答 >
问题:

Hibernate:多个表,同一个对象

尉迟哲瀚
2023-03-14

我正在尝试编写一个简单的应用程序,其中包含一个跟踪每个用户支付的款项的表和一个包含每个用户支付的总金额(所有付款的总和)的第二个表。目前,两个表都有相同的字段(firstName、lastName、金额),我已经将它们从同一个Java类映射到多个表,我无法将该类映射到多个表。对此有什么简单的解决方案吗?

@Entity
@Table(name="Payment")
public class Payment{

  @Id
  @GeneratedValue(strategy = GenerationType.AUTO)
  private Long id;

  @Column
  @NotNull
  private String firstNname;

  @Column
  @NotNull
  private String lastNname;

  @Column
  @NotNull
  private double amount;

... Constructor, getters and setters
}

共有3个答案

林弘文
2023-03-14

您可以尝试使用@二级表注释。

类似这样:

@Entity
@Table(name = "MY_PAYMENT")
@SecondaryTable(name = "MY_PAYMENT_DETAILS",
    pkJoinColumns = @PrimaryKeyJoinColumn(name = "pd_payment_id"))
public class Payment {

   @Id
   @Column(name = "p_id")
   private Long id;
   
   @Column(name = "p_first_name")
   private String firstNname;

   // ...
   
   @Column(name = "pd_amount", table = "MY_PAYMENT_DETAILS")
   private double amount;
}

假设您具有以下架构:

sql prettyprint-override">create table MY_PAYMENT
(
   p_id number,
   p_first_name varchar(200),
   CONSTRAINT MY_PAYMENT_PK PRIMARY KEY(p_id)
);

create table MY_PAYMENT_DETAILS
(
   pd_payment_id number,
   pd_amount number,
   CONSTRAINT MY_PAYMENT_DETAILS_PK PRIMARY KEY(pd_payment_id),
   CONSTRAINT MY_PAYMENT_DETAILS_FK foreign key(pd_payment_id) references MY_PAYMENT(p_id)
);

另请参阅hibernate文档的本节。

仇浩旷
2023-03-14

你应该使用@MappedSuperclass。这是你最容易的选择。

东方琪
2023-03-14

您需要:

@MappedSuperclass带字段的公共类{\\未用@Entity ..><

@Entity公共类EntityClass扩展ClassSusTheFields{}

@实体公共类另一个实体类扩展了带有字段{}的类

这样,两个扩展ClassSusTheFields的类将具有相同的字段,但将映射不同的表。

您只需要将所有公共字段放在一个用@Mep dSuperclass注释的类中,但not@Entity,然后在其他用@Entity注释的类中扩展这个类。

 类似资料:
  • 当我映射同一个实体时,就像这里回答的那样: Hibernate与同一实体的多对多关联 在“tbl_friends”表中,我有相同含义的行。例如,我有id=1的用户和id=2的用户。在“tbl_friends”表中,当他们作为朋友链接时,我有两行 使用Hibernate或JPA引用是否可以在一行(1-2或2-1)中建立这种关系?

  • 我有两个这样的等级: 和 我想使用hibernate持久化这两个类。字段messagesOfTypeA、messagesOfTypeB和messagesOfTypeC根据消息中的类型字段对消息对象进行分组。 如何使用XML hibernate映射映射MyClass和Message之间的一对多关系?(我正在使用Hibernate 3.6)

  • 首先,我已经阅读了Hibernate——一个包含多个实体的表?。 然而,我希望将两个实体映射到同一个表,但我希望它们都是实体,我可以从中选择。我的意思是: 一个表:人(id、姓名、出生日期、城市、街道、邮政编码)。 两个实体:人(id、name、dateOfBirth)、地址(id、城市、街道、邮政编码)。 实体之间是1:1的关系,但数据库中仍然是1个表。 如果我在上面的链接中使用建议的解决方案(

  • 我的数据模型中有以下实体关系。 ERD Hibernate实体: 要求:我想用实体B的连接获取查询实体C,同时也急切地获取实体D。查询完成后,我希望如果我执行,它不应导致hibernate中的N 1查询问题。 我正在尝试以下JPQL查询: 这导致结果重复,因为与实体D交叉连接。我得到的不是一个结果,而是n个结果,其中n是实体D列表的大小。 我该如何避免这种情况?有没有办法在JPQL中不交叉连接地获

  • 我试图连接多个表,并将表列映射到用户对象列表。 下面是SQL查询,我正在尝试使用Hibernate条件转换为ORM: 从上面的查询中,我们将获得一个用户对象列表,并尝试将结果映射到用户对象。下面是要形成的用户对象的POJO类。 如何连接多个表和相应列到用户对象的映射? 谢谢你的帮助。。谢谢