Как использовать myBatis с отношением OneToOne, используя (если возможно) конфигурацию Java в Spring?
Я хочу иметь отношение oneToOne между Person и Address. Итак, мои объекты будут (без геттера и сеттера):
public class Address {
private Integer addressId;
private String streetAddress;
...getter and setter
}
public class Person {
private Integer personId;
private String name;
private Integer addressId;
...getter and setter
}
У меня есть картограф для Person и картограф для Address:
@Mapper
public interface AddressMapper {
@Insert("Insert into address (streetAddress) values(#{streetAddress})")
@Options(useGeneratedKeys = true, flushCache = FlushCachePolicy.TRUE, keyProperty="addressId")
public Address saveAddress(Address address);
@Select("SELECT * FROM Address")
public List<Address> getAll();
}
@Mapper
public interface PersonMapper {
@Insert("Insert into person(name,addressId) values (#{name},#{addressId})")
public Integer save(Person person);
@Select("select * from Person ")
@MapKey("personId")
Map<Integer, Person> getAllPerson();
}
Затем я использую контроллер для создания человека и связывания адреса (это всего лишь простой пример):
@GetMapping("/insert")
public Integer insertPerson() {
Person person = new Person("Nome1");
Address address = new Address("via test");
int addressId = addressMapper.saveAddress(address);
person.setAddressId(addressId);
return personMapper.save(person);
}
Моя проблема в том, что addressMapper.saveAddress(address); вернуть количество сохраненных адресов, а не идентификатор. Есть ли способ заставить его возвращать идентификатор адреса, вставленного с помощью конфигурации Java?
В противном случае можно ли использовать объект Person таким образом?
public class Person {
private Integer personId;
private String name;
private Address addressId;
...getter and setter
}
Код на Github (он общедоступен, поэтому вы можете клонировать репозиторий, если хотите):