java - 映射实现接口(interface)的两个类之一

标签 java hibernate

类的属性可以是两个类类型之一,这就是为什么我尝试创建类类型实现的接口(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/

相关文章:

performance - Hibernate 适合批处理吗?内存使用情况如何?

java - Hibernate 将时间戳映射为可序列化

java - 加载 9-patch 图像作为 Libgdx Scene2d 按钮背景看起来很糟糕

Java 外部类实例生命周期

java - 数组引用表达式未完全求值

hibernate - 无法使用Postgres DB启动Grails 3.3.8应用程序

java - Springframework.dao.InvalidDataAccessResourceUsageException hibernate .SQLGrammarException MySQLSyntaxErrorException

java - 使用 jetty :run-exploded 启动时,Wicket 应用程序在启动时抛出异常

java - 回收器 View 中的空对象引用

java - 用java读取并解析CSV文件