有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java在JPA中将一个值映射到多个列

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

代码如下

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

问题是我不想在实体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);
    }
}

谢谢


共 (1) 个答案

  1. # 1 楼答案

    据我所知,您只需要在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;