Нет никакой связи между сохранением объекта в БД с использованием ORM, например, Hibernate
и POST/PUT/PATCH
, которые являются HTTP
глаголами. Пожалуйста, не запутайтесь.
Предполагая, что у вас есть объекты A и B, определенные как двунаправленная связь один-к-одному (по умолчанию атрибут ассоциации (в данном случае один-к-одному) optional
равен true):
@Entity
public class A implements Serializable {
private static final long serialVersionUID = -7174277851973636756L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@OneToOne(mappedBy = "a") //If you add optional = false, it will not work
B b;
//And so on
}
@Entity
public class B implements Serializable {
private static final long serialVersionUID = -6581935686158784727L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@OneToOne
@JoinColumn(name = "id") //You need this, else it will look for "a_id" column(foreign_key) in Class/Table B.
A a;
//And so on
}
И ARepository и BRepository следующим образом:
public interface ARepository extends CrudRepository<A, Long> {
}
public interface BRepository extends CrudRepository<B, Long> {
}
Вы можете просто сделать сначала:
@Autowired
private ARepository aRepository;
A a = new A();
aRepository.save(a);
А потом:
@Autowired
private BRepository bRepository;
B b = new B();
bRepository.save(b);
Эквивалентные SQL:
insert
into
a
(id)
values
(?)
insert
into
b
(id)
values
(?)
Примечание. Если объект уже существует, save
выполнит update
вместо insert
, но поскольку мы используем автозапуск сгенерированный идентификатор, он всегда будет делать insert
.