Привет и спасибо за замечательную статью :)

Я спрошу вас, есть ли возможность отображать отношения типа 1-к-1.

например: у меня есть объект пользователя с ключом addressId FK на объекте Address с идентификатором PK.

Как я могу отобразить это? Я только что отметил аннотацию @Embedded, но в моей БД у меня есть две отдельные таблицы (пользовательская и адресная), и я хочу сохранить инкапсуляцию на стороне Java:

Просто быть чистым:

@Entity(tableName = "user",
        foreignKeys = @ForeignKey(entity = Address.class,
                parentColumns = "id",
                childColumns = "address",
                onDelete = ForeignKey.NO_ACTION))
public class User {
    @PrimaryKey
    @NonNull
    private String id;
    @ColumnInfo(name = "name")
    private String name;
    @ColumnInfo(name = "surname")
    private String surname;
    
    private Address address;  <-- I need to map this

Ниже приведен SQL, используемый для получения всех данных о пользователе и связанном адресе:

@Query("SELECT * FROM user u LEFT JOIN addresses a ON a.id = u.address WHERE u.id= :id")
LiveData<User> loadUser(String id);

Приведенный выше запрос возвращает все свойства из таблиц User и Address, поэтому я предположил, что мне нужно реализовать свой собственный Converter для создания адреса пользователя из «адреса» FK, как показано ниже:

public class AddressConverter {

    @TypeConverter
    public static Address idToAddress(String id, String address, String city){
        Address a = new Address();
        a.setId(id);
        a.setCity(city);
        a.setAddress(address);

        return a;
    }

    @TypeConverter
    public static String addressToId(Address address){
        return address!=null ? address.getId() : null;
    }
}

но для TypeConverter требуется только один вход, и он не может сканировать курсор в поисках совпадающих параметров (возможно, это может быть хорошим улучшением;)).

Как мы можем это сделать?

Спасибо!