I'm trying to get Hibernate @OneToOne
annotations working and not having much success here...
Let's say I've got a table called status
that looks like this:
+------------------------------------------------+
| status |
+------------------------------------------------+
| id | frn_user_id | frn_content_id | status |
+----+-------------+----------------+------------+
| 1 | 111 | 0 | "active" |
+----+-------------+----------------+------------+
| 2 | 0 | 222 | "inactive" |
+----+-------------+----------------+------------+
And I've got an entity for User
that looks like this:
@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
}
And a similar one for Content
, and another entity for Status
that looks like this:
@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
}
When I perform a read on User
, I expect that User.getStatus()
will return a Status
object with id=1
. Instead, I get an AnnotationException: "Referenced property not a (One|Many)ToOne: Status.userId in mappedBy User.status"
I've poured through docs, tutorials and examples here on SO, but everything I've tried so far has failed.
Also worth noting: This should support a one-to-zero-or-one relationship, as some user
and content
records will not have a reference in the status
table.
Any help would be greatly appreciated!
userId
needs to be of typeUser
with a@OneToOne
/@JoinColumn
on it. Also note you have a typo (contentId/userId) – Correspondent