Сопоставить одно значение с несколькими столбцами в JPA - PullRequest
0 голосов
/ 08 июня 2018

Я получаю входное значение от пользователя и сохраняю его в БД.Я использую JPA для записи в БД.Если мне нужно сохранить входное значение в 2 столбцах в БД, какую аннотацию я должен использовать?

Код ниже.

Мне нужно сохранить введенные пользователем данные (хранящиеся в поле компонента UserOrderDetails.noOfItemsSelected) в 2 столбцах таблицы БД NoOfItemsSelected и NoOfItemsDispatched.Какую аннотацию мне следует использовать?

Проблема в том, что я не хочу добавлять поле для NoOfItemsDispatched в компоненте Entity Bean.

Таблица БД:

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

My Entity 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 Ответ

0 голосов
/ 08 июня 2018

Насколько я знаю, вам просто нужно добавить аннотации, как показано ниже, к полям в классе сущности слоя 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

}

ИЛИ

В качестве альтернативымы можем использовать аннотацию @Formula в Hibernate. Заполните одно поле, которое поступает из пользовательского запроса в соответствующее поле, а для другого столбца, для которого вы можете сохранить то же значение, используйте @ Formula.Look для некоторых примеров @ Formula

 @Formula("noOfItemsSelected")
 private float noOfItemsDispatched;
...