Я хочу изучить отношения между таблицами и встретил вопрос о сохранении данных.
Я создал 2 объекта: User и Dog. Предположим, что это одностороннее отношение многие-к-одному, у одного пользователя может быть много собак, у одной собаки может быть только один пользователь.
В классе DogEntity:
@ManyToOne
@JoinColumn(name = "user_id")
private UserEntity user;
И никаких частных в классе UserEntity.
При тестировании, как показано ниже:
@Test
public void saveManyFirst(){
UserEntity user1 = new UserEntity("user2@qq.com", "123qwe",
"zhangsan2",null,
null,null,
null);
DogEntity dog1 = new DogEntity("Sakura","Akita",null,user1);
DogEntity dog2 = new DogEntity("Sakura2","Akita2",null,user1);
dogDao.save(dog1);
dogDao.save(dog2);
userDao.save(user1);
}
Разумно получить ошибку, поскольку «объект ссылается на несохраненный временный экземпляр - сохраните временный экземпляр перед сбросом».
Затем я добавил @Transactional, как показано ниже:
@Test
@Transactional
public void saveManyFirst(){
UserEntity user1 = new UserEntity("user2@qq.com", "123qwe",
"zhangsan2",null,
null,null,
null);
DogEntity dog1 = new DogEntity("Sakura","Akita",null,user1);
DogEntity dog2 = new DogEntity("Sakura2","Akita2",null,user1);
dogDao.save(dog1);
dogDao.save(dog2);
userDao.save(user1);
}
У меня есть три вставки и таблица собаки , таблица пользователя . FK в таблице Dog равны нулю.
Затем я добавил @Rollback (false) (значение по умолчанию истинно).
@Test
@Transactional
@Rollback(false)
public void saveManyFirst(){
UserEntity user1 = new UserEntity("user2@qq.com", "123qwe",
"zhangsan2",null,
null,null,
null);
DogEntity dog1 = new DogEntity("Sakura","Akita",null,user1);
DogEntity dog2 = new DogEntity("Sakura2","Akita2",null,user1);
dogDao.save(dog1);
dogDao.save(dog2);
userDao.save(user1);
}
Я получил 3 вставки и еще 2 обновления, и FK в таблице Dog обновляются по желанию. таблица собаки
Конечно, я знаю, что мне лучше сначала спасти того, у кого есть FK, но я изучаю Spring Data Jpa, я действительно хочу знать, почему это произошло. Не могли бы вы мне помочь? Заранее спасибо.