Я пытаюсь заставить работать аннотации 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»
Я просмотрел документы, учебные пособия и примеры здесь, на SO, но все, что я пробовал до сих пор, не удалось.
Также стоит отметить: это должно поддерживать отношение один к нулю или один, так как некоторые записи user
и content
не будут иметь ссылки в таблице status
.
Любая помощь будет принята с благодарностью!
userId
должен быть типаUser
с@OneToOne
/@JoinColumn
на нем. Также обратите внимание, что у вас есть опечатка (contentId/userId) - person   schedule 13.02.2014