Я новичок в JPA.У меня есть, на мой взгляд, очень простой пример, но у меня возникли проблемы с его реализацией.По сути, у меня есть сущность, которую я хочу «повторно использовать» в других сущностях.
У меня есть User
с двумя полями - Home
и Office
.Каждый из них, в свою очередь, ссылается на Address
, например:
@Entity
public class User extends Model {
@Column
private String name;
@OneToOne
private Home home;
@OneToOne
private Office office;
}
@Entity
public class Home extends Model {
@OneToOne
private Address address;
@OneToOne(mappedBy="home")
private User user;
// ...
}
@Entity
public class Office extends Model {
@OneToOne
private Address address;
@OneToOne(mappedBy = "office")
private User user;
// ...
}
@Entity
public class Address extends Model {
@Column
private String line1;
@Column
private String line2;
@Column
private String city;
/*
* Is this possible? Being owned by two entities?
*/
@OneToOne(mappedBy="address")
private Home home;
@OneToOne(mappedBy="address")
private Office office;
// ...
}
Как мне этого добиться?
EDIT
Я изначально работалв это исключение:
org.hibernate.AnnotationException: @OneToOne or @ManyToOne on example.Home.address references an unknown entity: example.Address
Оказывается, один из классов импортировал аннотацию @Entity
из org.hibernate
вместо javax.persistence
.После исправления этого исходное исключение исчезло ( это помогло мне точно определить проблему)
Однако теперь у меня есть новое исключение:
org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: example.User.home -> example.Home
Надеюсьне совсем понимаю это точно.Должен ли я вызывать save
объект Home
, прежде чем сделать это на экземпляре User
?