Я пытаюсь работать с аннотациями Hibernate @OneToOne и не имею большого успеха здесь...
Скажем, у меня есть таблица под названием status
, которая выглядит так:
+------------------------------------------------+
| status |
+------------------------------------------------+
| id | frn_user_id | frn_content_id | status |
+----+-------------+----------------+------------+
| 1 | 111 | 0 | "active" |
+----+-------------+----------------+------------+
| 2 | 0 | 222 | "inactive" |
+----+-------------+----------------+------------+
И у меня есть сущность для User
, которая выглядит так:
@Entity
@Table(name = "user")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id", nullable = false)
private Integer id;
@OneToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER, mappedBy = "userId")
private Status status;
// getters and setters
}
И аналогичный для Content
, а другой объект для status
выглядит следующим образом:
@Entity
@Table(name = "status")
public class Status {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id", nullable = false)
private Integer id;
@Column(name = "frn_user_id")
private Integer userId;
@Column(name = "frn_content_id")
private Integer contentId;
@Column(name = "status")
private String status;
// getters and setters
}
Когда я выполняю чтение на User
, я ожидаю, что User.getStatus()
вернет объект status
с помощью id=1
. Вместо этого я получаю исключение AnnotationException: "Связанное свойство не (One | Many) ToOne: Status.userId в mappedBy User.status"
Я выложил через docs, учебники и примеры здесь, SO, но все, что я пробовал до сих пор, не удалось.
Также стоит отметить: это должно поддерживать отношение "один к нулю" или "один", поскольку некоторые записи User
и Content
не будут иметь ссылку в таблице status
.
Любая помощь будет принята с благодарностью!