首页 > 解决方案 > 将一个值映射到 JPA 中的多个列

问题描述

我从用户那里得到一个输入值并将其存储到数据库中。我使用 JPA 写入数据库。如果我需要将输入值存储到数据库中的 2 列中,我必须使用什么注释?

代码如下。

我需要将用户输入(存储在 Bean 字段 UserOrderDetails.noOfItemsSelected 中)存储到 DB 表 NoOfItemsSelected 和 NoOfItemsDispatched 的 2 列中。我应该使用什么注释?

问题是我不想在实体 Bean 中为 NoOfItemsDispatched 添加一个字段。

数据库表:

create table UserOrderDetails(
TransactionId varchar(255),
CreationDateTime datetime2(),
NoOfItemsSelected int,
NoOfItemsDispatched int
)
GO

我的实体 Bean:

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

    @Id
    private String transactionId;   
    private Timestamp CreationDateTime; 
    private int noOfItemsSelected;
    //Getters and Setters
}

参考控制器类:

class UserOrderCreationController {
@RequestMapping(value = "/createUserOrder", method = RequestMethod.POST)
    public ResponseEntity<?> createUserOrder(@RequestBody UserOrderDetails userOrderDetails , @RequestHeader HttpHeaders headers) throws Exception{

    //Some business logic to handle the user Order

    dbrepository.save(UserOrderDetails);

    return new ResponseEntity<UserOrderDetails>(userOrderDetails, HttpStatus.CREATED);
    }
}

谢谢

标签: javajsondatabasejpamultiple-columns

解决方案


据我所知,您只需要在 DAO 层实体类中的字段上添加如下注释。如果您有相同的字段名和列名,这些注释是可选的。

由于问题将一个值声明为多个列,因此在调用 DAO.save 之前,您应该在两个字段中填充值。

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

   //Need to have identity generator of your wish

    @Id
    @Column(name = "TRANSACTION_ID")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private String transactionId;   
    private Timestamp CreationDateTime; 

   **@Column(name = "NO_OF_ITEMS_SELECTED")**
    private int noOfItemsSelected; 

   **@Column(name = "NO_OF_ITEMS_DISP")** 
    private int noOfItemsDispatched;
    //Getters and Setters

}

或者

或者,我们可以使用 Hibernate 的 @Formula 注释。将来自用户请求的一个字段填充到相应的字段,对于另一列,您可以使用 @Formula 保持相同的值。查找一些 @Formula 的示例

 @Formula("noOfItemsSelected")
 private float noOfItemsDispatched;

推荐阅读