比如说有两个家伙, 其中一个是Loginnable(接口), 如下:
import javax.persistence.Access;
import javax.persistence.AccessType;
import javax.persistence.Column;
import javax.persistence.Embeddable;@Embeddable
@Access(AccessType.PROPERTY)
public interface Loginnable {
@Column
String getUserName();
@Column
String getPassword();
void setUserName(String userName);
void setPassword(String password);
}再来一个实体, 如下:@Entitypublic class Student implements Serializable {
@Id @GeneratedValue
private Long id;
@Embedded
private Loginnable login;
private static final long serialVersionUID = 1L; public Student() {
super();
} public void setId(Long id) {
this.id = id;
} public Long getId() {
return id;
} public void setLogin(Loginnable login) {
this.login = login;
} public Loginnable getLogin() {
return login;
}
}这样eclipse报错, 强行编译, 然后运行, 抛异常, 比如不能实例化接口和抽象类什么的.
你不能让我用接口, 我还怎么编程.
import javax.persistence.Access;
import javax.persistence.AccessType;
import javax.persistence.Column;
import javax.persistence.Embeddable;@Embeddable
@Access(AccessType.PROPERTY)
public interface Loginnable {
@Column
String getUserName();
@Column
String getPassword();
void setUserName(String userName);
void setPassword(String password);
}再来一个实体, 如下:@Entitypublic class Student implements Serializable {
@Id @GeneratedValue
private Long id;
@Embedded
private Loginnable login;
private static final long serialVersionUID = 1L; public Student() {
super();
} public void setId(Long id) {
this.id = id;
} public Long getId() {
return id;
} public void setLogin(Loginnable login) {
this.login = login;
} public Loginnable getLogin() {
return login;
}
}这样eclipse报错, 强行编译, 然后运行, 抛异常, 比如不能实例化接口和抽象类什么的.
你不能让我用接口, 我还怎么编程.
你需要这个。类中映射支持接口映射的。
如Hibernate
@ManyToAny
我把接口Loginnable改成了@MappedSuperclass, 然后发布的时候抛出异常:Could not determine type for: com.Loginnable, at table: Student, for columns: [org.hibernate.mapping.Column(login)]
import javax.persistence.AccessType;
import javax.persistence.Column;
import javax.persistence.Embeddable;//回复2楼,用@MappedSuperclass貌似不行,这个注解说明可以扩展它构建一个实体
//然而我这里用的是组合, 而不是继承.
@Embeddable
@Access(AccessType.PROPERTY)
public interface Loginnable {
@Column
String getUserName();
@Column
String getPassword();
void setUserName(String userName);
void setPassword(String password);
}
再来一个实体, 如下:@Entitypublic class Student implements Serializable {
@Id @GeneratedValue
private Long id;
@Embedded
private Loginnable login; //估计是这里出了问题
private static final long serialVersionUID = 1L; public Student() {
super();
} public void setId(Long id) {
this.id = id;
} public Long getId() {
return id;
} public void setLogin(Loginnable login) {
this.login = login;
} public Loginnable getLogin() {
return login;
}
}
这样eclipse报错, 强行编译, 然后运行, 抛异常, 比如不能实例化接口和抽象类什么的.
你不能让我用接口, 我还怎么编程.
@Entity
@Table(name="tb_loginnable")
@Inheritance(strategy=InheritanceType.JOINED)
public class Loginnable {
}@Entity
@Table(name="tb_student")
@PrimaryKeyJoinColumn(name="id", referencedColumnName="id")
public class Student extends Loginnable