Я столкнулся со следующей проблемой: У меня есть одна таблица A и B с внешним ключом к таблице A. Сущность имеет следующее поле: А:
public class A{
@Column(name = "id_adres", nullable = false)
private Long idAddress;
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name = "id_adres", nullable = false)
private Long idAddress;
Объект B имеет поле (среди прочего):
public class B{
@Id
@Column(name = "id")
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long id;
@Column(name = "id_adres", nullable = false)
private Long idAddress;
@Column(name = "id_adres", nullable = false)
private Long idAddress;
Как добавить поле типа B в сущность A? А:
@OneToOne(mappedBy = "idAddress")
private B b
Это решение не работает, поле B b в объекте A имеет значение NULL после оператора запроса.
К сожалению, не работает с OneToOne @PrimaryKeyJoinColumn - возможно, потому, что у меня Long вместо типа объекта в объекте B





длинная причина не в том, что у меня есть тот же пример с длинной попыткой:
public class UserToken {
@OneToOne(targetEntity = User.class)
@JoinColumn(nullable = false, name = "user_id")
private long tokenId;
}
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "user_id", unique = true, nullable = false)
private long userId;
}
И ваша сущность (таблица) UserToken не имеет внешнего ключа для пользователя?
Да, вам не нужно указывать внешний ключ для пользователя. Есть много способов использовать один из способов для oneToOne, например baeldung.com/jpa-join-column.
Не работает - возможно, проблема в том, что я использую query: address = em.createQuery("SELECT b FROM Address b WHERE...
Запрос запроса = em.createQuery("ВЫБЕРИТЕ адрес ИЗ ГДЕ a.fileName= :fileName"); query.setParameter("имя_файла", значение); и запрос.getResultList();
и ПРИСОЕДИНЯЙТЕСЬ? В адресе таблицы (A) нет внешнего ключа к свойству B, поэтому, может быть, мне следует использовать JOIN? ВЫБЕРИТЕ ОТ Адрес ПРИСОЕДИНЯЙТЕСЬ a.addressProperty ap ON ap.idAddress = a.idAddress WHERE a.idClient=:id")
em.createQuery("ВЫБЕРИТЕ b ИЗ адреса b слева ПРИСОЕДИНЯЙТЕСЬ b.addressProperty ap WHERE b.idClient=:id").setParameter("id", idClient).getResultList(); РАБОТАЕТ! Спасибо @ikarayel!
Я обнаружил следующую ОШИБКУ - возможно, это мой случай! hibernate.atlassian.net/browse/HHH-7307
Возможный дубликат Отношения JPA Hibernate «один к одному»