org.hibernate.PersistentObjectException: отдельная сущность передана в постоянное хранилище: com.bookstore.entity.City - PullRequest
0 голосов
/ 26 апреля 2019

У меня есть 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);
...