Опитвам се да накарам анотациите на 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