java 将具有关系的JPA实体Map到平面数据库表

cld4siwp  于 2023-05-05  发布在  Java
关注(0)|答案(1)|浏览(170)

假设我有一个简单的数据库表,我不能改变它的定义,但另一方面,我想利用面向对象编程来实现新的API。
下面是一个postgresql DB表表示的例子:

create table message_request (
  id int primary key,
  recipient varchar(100) not null,
  message TEXT not null,
  parameters TEXT[],
  header_parameter varchar(100),
  button_parameter varchar(100),
  created_at timestamp not null
);

在Java应用程序中,我希望有一个包含以下代码的API:
MessageRequest.java

@Entity
public class MessageRequest {
  private Integer id;
  private LocalDateTime createdAt;
  private String recipient;
  private String message;
  @Type(ListArrayType.class)
  private List<String> parameters;
  private Header header;
  private Footer footer;
}

Header.java

public class Header {
  private String parameter;
}

Footer.java

public class Footer {
  private String buttonParameter;
}

MessageRequest字段Map到DB表没有问题,除了HeaderFooter类,我想将它们Map到同一个表中的相应字段。
这怎么可能?

cs7cruho

cs7cruho1#

注解@Embedded工作起来就像一种魅力。
MessageRequest.java

@Entity
public class MessageRequest {
  ...
  @Embedded
  private Header header;
  @Embedded
  private Footer footer;
}

Header.java

@Embeddable
public class Header {
  @Column(name = "header_parameter")
  private String parameter;
}

Footer.java

@Embeddable
public class Footer {
  @Column(name = "button_parameter")
  private String buttonParameter;
}

相关问题