Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java中对象的映射接口类型_Java_Jpa_Hibernate Mapping_Persistence.xml - Fatal编程技术网

java中对象的映射接口类型

java中对象的映射接口类型,java,jpa,hibernate-mapping,persistence.xml,Java,Jpa,Hibernate Mapping,Persistence.xml,我有以下代码 interface Loanable {} abstract class Material {} @Entity class Journal extends Material {} @Entity class Book extends Material implements Loanable {} @Entity class DigitalMedia extends Material implements Loanable {} @Entity @Table(name =

我有以下代码

interface Loanable {}

abstract class Material {}

@Entity
class Journal extends Material {}

@Entity
class Book extends Material implements Loanable {}

@Entity
class DigitalMedia extends Material implements Loanable {}

@Entity
@Table(name = "Loan")
@Access(value = AccessType.FIELD)
public class Loan {
    @Id
    @Column(name="Loan_ID",updatable = false, nullable = false)
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;

    @OneToOne (cascade=CascadeType.ALL)
    @JoinColumn(name="studentId")
    /* Person who makes the loan */
    private User user;

    //@Column(name="loanable")
    @OneToOne (cascade=CascadeType.ALL)
    @JoinColumn(name="materialId")
    /* Loanble which is loaned */
    private Loanable loanable;
}

如代码所示,我正在尝试将
Loan
映射到
Loanable
。一个
用户一次可以有一笔贷款我如何将可借阅类型对象映射到数据库?我在
书籍
数字媒体
中搜索了制作抽象类的方法并对其进行了扩展,但我无法扩展两个类,因为它们已经扩展了
材料
@Convert
似乎对接口类型的对象也不起作用。我正在使用带有Hibernate持久性的JPA。

JPA实体需要是类,因此尝试映射接口将不起作用。映射类不一定是具体的,因此抽象类使用关联

以下方面应起作用:

@MappedSuperclass
abstract class Material {}

@MappedSuperclass
abstract class LoanableMaterial extends Material implements Loanable {}

@Entity
class Journal extends Material {}

@Entity
class Book extends LoanableMaterial {}

@Entity
class DigitalMedia extends LoanableMaterial {}

@Entity
class Loan {
  @ManyToOne(targetEntity = LoanableMaterial.class)
  LoanableMaterial loaned;
}


Loan
Loanable
之间的关联是多对多的。这是因为,尽管一次只能将一份材料借给一名学生,但它可以在不同的时间借给多名学生。同样,尽管一个学生一次只能借出一种材料,但同一个学生可以在不同的时间借出许多材料。因此,从
Loan
User
的关联也应该是
manytone

提问时,请发布代码而不是描述代码,因为从实际代码中更容易理解问题。还要确保只发布与问题相关的代码,避免发布与问题无关的任何部分。只有一些JPA提供商支持接口。听起来你的JPA提供商没有