类的属性可以是两个类类型之一,这就是为什么我尝试创建类类型实现的接口(interface)
@Entity
@Table(name = "users")
public class User{
@Id
@Column(name="id")
@GeneratedValue(strategy=GenerationType.AUTO)
private Long userID;
@Column(name="email")
private String email;
@OneToOne(mappedBy = "user")
private Login login;
... getters/setters
@MappedSuperclass
public interface Login {
User user = new User();
}
@Entity
@Table(name = "user_logins_social")
@IdClass(UserLoginSocialID.class)
public class UserLoginSocial implements Login{
@OneToOne
@JoinColumn(name="uid")
private User user;
...
@Entity
@Table(name = "user_logins_native")
public class UserLoginNative implements Login{
@OneToOne
@JoinColumn(name="uid")
private User user;
...
所以我不能使用目标实体,因为这两个类都可以使用。这是错误堆栈:org.hibernate.AnnotationException:未知的mappedBy in:model.User.login,引用的属性未知:model.Login.user。请帮助我
最佳答案
无法在接口(interface)上映射或查询。
@MappedSuperclass 应该能够使用抽象类和类。
请检查:wiki http://en.wikibooks.org/wiki/Java_Persistence/Advanced_Topics#Interfaces
@MappedSuperclass
public abstract class User{
@Id
@Column(name="id")
@GeneratedValue(strategy=GenerationType.AUTO)
private Long userID;
@Column(name="email")
private String email;
@OneToOne(mappedBy = "user")
private Login login;
// ... getters/setters
@Entity
@Table(name = "login")
public class Login{
@OneToOne
private User user;
}
@Entity
@Table(name = "user_logins_social")
@IdClass(UserLoginSocialID.class)
public class UserLoginSocial extends User{
//...
}
@Entity
@Table(name = "user_logins_native")
public class UserLoginNative extends User{
//...
}
关于java - 映射实现接口(interface)的两个类之一,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31576590/