У меня есть две таблицы: клиента и адрес:JPA - OneToMany - Как объединить старые и новые значения объекта в JPA с кратчайшим кодом
Таблица Заказчик:
CREATE TABLE `customer` (
`customer_id` smallint(5) unsigned NOT NULL AUTO_INCREMENT,
`user_name` varchar(45) NOT NULL,
`password` varchar(45) NOT NULL,
`encrypt_key` varchar(200) NOT NULL,
`first_name` varchar(45) NOT NULL,
`last_name` varchar(45) NOT NULL,
`email` varchar(50) DEFAULT NULL,
`active` tinyint(1) NOT NULL DEFAULT '1',
`last_update` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`self_description` varchar(2000) NOT NULL,
PRIMARY KEY (`customer_id`),
KEY `idx_last_name` (`last_name`),
) ENGINE=InnoDB AUTO_INCREMENT=101 DEFAULT CHARSET=utf8;
Таблица адресов:
CREATE TABLE `address` (
`account_id` smallint(5) unsigned NOT NULL AUTO_INCREMENT,
`customer_id` smallint(5) unsigned NOT NULL,
`address_type` varchar(15) NOT NULL, -- Office, Branch-1, Branch-2,
`door_num` varchar(50) NOT NULL,
`landmark` varchar(150) DEFAULT NULL,
`street` varchar(50) DEFAULT NULL,
`area_name` varchar(25) NOT NULL,
`district` varchar(25) NOT NULL,
`city` varchar(25) NOT NULL,
`postal_code` varchar(10) DEFAULT NULL,
`phone1` varchar(20) NOT NULL,
`phone2` varchar(20),
`last_update` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`account_id`),
KEY `idx_fk_city` (`city`)
) ENGINE=InnoDB AUTO_INCREMENT=201 DEFAULT CHARSET=utf8;
В Customer.java
@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
@JoinColumn(name = "customer_id", nullable = false)
private List<Address> addresses;
В Адрес.java Относительно клиента, потому что я использую uni-directction.
В CustomerDaoImpl.java
public boolean updateEntity(Customer customer) {
session = sessionFactory.openSession();
tx = session.beginTransaction();
session.saveOrUpdate(customer);
tx.commit();
session.close();
return false;
}
Издание является:
Я делаю обновление, оно создает нового пользователя каждый раз.Но мне нужно обновить адреса клиентов и его дочерние адреса и объекты темы.
Мой запрос тела:
{
"customerId": 102,
"addresses": [
{
"accountId": 203,
"addressType": "main office",
"areaName": "area3",
"city": "city3",
"district": "district3",
"doorNum": "89",
"landmark": "landmark3",
"phone1": "646432365465",
"phone2": "4534542355675",
"postalCode": "453245",
"street": "street3"
}
],
"active": 1,
"email": "[email protected]",
"encryptKey": "wwwwwfsad",
"firstName": "ccc",
"lastName": "ddd",
"password": "user2",
"selfDescription": "user2",
"userName": "user2",
"theme": {
"themeId": 402,
"description": "theme2",
"name": "theme2",
"categoryId": 301
}
}
Просьба направить меня, что и все изменения, которые я должен сделать.
Необходимо сначала получить старшую клиентскую сущность, а затем добавить новые данные в клиенте, а затем обновить объект клиента. Вот и все. –