У меня есть 3 таблицы, названные для клиента , города и района .В то время как таблица клиента связана с городом и район , город и район связаны друг с другом.
Когда я сохраняю информацию о клиенте через hibernate
, появляется ошибка, как показано ниже.
org.hibernate.PersistentObjectException: detached entity passed to persist: com.bookstore.entity.City
Я мог бы использовать опцию EAGER и Cascade для всех этих таблиц, но ничто не может решить проблему.
Вот таблицы.
Класс клиента
@Entity
@Table(name="CUSTOMER",catalog = "JSPPROJECTDATABASE")
public class Customer implements Serializable{
...
@OneToOne(fetch = FetchType.EAGER,cascade = CascadeType.ALL)
@JoinColumn(name = "CITY")
private City city;
@OneToOne(fetch = FetchType.EAGER,cascade = CascadeType.ALL)
@JoinColumn(name = "DISTRICT")
private District district;
}
Класс города
@Entity
@Table(name="CITY",catalog = "JSPPROJECTDATABASE")
public class City implements Serializable{
...
@OneToMany(fetch = FetchType.EAGER, mappedBy = "districtCity",cascade = CascadeType.ALL)
private Set<District> districts = new HashSet<District>();
@OneToOne(fetch = FetchType.EAGER, mappedBy = "city",cascade = CascadeType.ALL)
private Customer customer;
}
Класс района
@Entity
@Table(name = "DISTRICT", catalog = "JSPPROJECTDATABASE")
public class District implements Serializable {
...
@ManyToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
@JoinColumn(name = "CITY_ID")
private City districtCity;
@OneToOne(fetch = FetchType.EAGER, mappedBy = "district")
private Customer customer;
}
Вот вариант создания для клиента
String customerName = request.getParameter("customer_name");
String customerSurname = request.getParameter("customer_surname");
String customerPhoneNumber = request.getParameter("customer_phoneNumber");
int cityId = Integer.parseInt(request.getParameter("city"));
int districtId = Integer.parseInt(request.getParameter("district"));
String customerAddress = request.getParameter("customer_address");
String customerZipcode = request.getParameter("customer_zipCode");
Customer newCustomer = new Customer();
newCustomer.setName(customerName);
newCustomer.setSurname(customerSurname);
newCustomer.setPhoneNumber(customerPhoneNumber);
newCustomer.setAddress(customerAddress);
newCustomer.setZipCode(customerZipcode);
City city = cityService.getCityById(cityId);
District district = districtService.getDistrictById(districtId);
newCustomer.setCity(city);
newCustomer.setDistrict(district);
customerService.createBook(newCustomer);