Я стараюсь иметь однонаправленные отношения OneToOne b/w два класса «Ресторан» и «Менеджер». «Менеджер» - это дочерний класс, который имеет один атрибут, называемый restaurantId. вот мой код и проблема объясняется ниже его:Spring-data-jpa OneToOne Однонаправленная проблема
Restaurant.java:
@Entity
public class Restaurant implements Serializable{
@Id
private long id;
//getters and setters}
RestaurantRepository.java
import java.util.List;
import org.springframework.data.repository.CrudRepository;
public interface RestaurantRepository extends CrudRepository<Restaurant, Long> {
List<Restaurant> findById(long id);
}
Manager.java:
@Entity
public class Manager implements Serializable {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private long id;
@OneToOne(fetch=FetchType.LAZY,optional=false,cascade = CascadeType.ALL)
@JoinColumn(name="restaurantId", referencedColumnName="id",nullable=false)
private Restaurant restaurantId;
//getters and setters}
Я нахожусь пытаясь проверить метод добавления для Manager.java в классе ниже:
public class ManagerTest {
private CrudRepository repository;
@Test
public void testAddManager() {
AbstractApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");
CrudRepository restaurantRepository = context.getBean(RestaurantRepository.class);
Date date = new Date();
Restaurant restaurant = (Restaurant) restaurantRepository.findOne(1L);
repository = context.getBean(ManagerRepository.class);
createManager("x","xx","xxxxxxxx","x","x","x","India","null","null", date, "[email protected]", restaurant);
context.close();
}
private void createManager(String firstName, String lastName, String contactNo, String addrStreet,String addrCity, String addrState, String addrCountry, String addrLat, String addrLong, Date birthDate, String email, Restaurant restaurant){
Manager manager = new Manager(firstName, lastName, contactNo, addrStreet, addrCity, addrState, addrCountry, addrLat, addrLong, birthDate, email);
manager.setRestaurantId(restaurant);
repository.save(manager);
}
}
С вышеуказанным кодом я ожидаю новую запись в таблице Manager, но она пытается сделать запись в таблице ресторанов.
здесь ошибка консоли в затмении:
Hibernate: insert into Restaurant (addrCity, addrCountry, addrLat, addrLong, addrState, addrStreet, contactNo, maxCapacity, name, id) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
Sep 16, 2014 2:24:20 PM org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions
WARN: SQL Error: 1062, SQLState: 23000
Sep 16, 2014 2:24:20 PM org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions
ERROR: Duplicate entry '1' for key 'PRIMARY'
Sep 16, 2014 2:24:20 PM org.hibernate.engine.jdbc.batch.internal.AbstractBatchImpl release
INFO: HHH000010: On release of batch it still contained JDBC statements
пожалуйста, помогите мне здесь. Любое предложение было бы здорово. :)
Как вы обрабатывать транзакции? .. Я думаю, что resturant отключен, когда вы сохраняете Manager и CASCADE.ALL, снова сохраняете Resturat, у которых есть ID = 1 «Дублировать первичный ключ». Можете ли вы добавить свою конфигурацию? .. один возможный тест - добавить объект-resturant @GeneratedValue (strategy = GenerationType.AUTO), если упор будет другой, как я говорю – Xstian