Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/338.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 Hibernate实体多态性,使用@MappedSuperclass注释_Java_Hibernate_Jpa_Orm_Hibernate Mapping - Fatal编程技术网

Java Hibernate实体多态性,使用@MappedSuperclass注释

Java Hibernate实体多态性,使用@MappedSuperclass注释,java,hibernate,jpa,orm,hibernate-mapping,Java,Hibernate,Jpa,Orm,Hibernate Mapping,考虑以下模型: 抽象类抽象日志 @MappedSuperclass public abstract class AbstractLog{ private Long id; private Set<Comment> comments; @Id @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "quasar_log_id_seq") public Long getI

考虑以下模型:

抽象类抽象日志

@MappedSuperclass
public abstract class AbstractLog{

    private Long id;
    private Set<Comment> comments;

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "quasar_log_id_seq")
    public Long getId() {
        return id;
    }

    @OrderBy(clause = "created")
    @OneToMany(mappedBy = "abstractLog", fetch = FetchType.LAZY, cascade = { CascadeType.ALL }, orphanRemoval = true)
    public Set<Comment> getComments() {
        return comments;
    }

    // setters
}
@Entity
@SequenceGenerator(name = "quasar_log_id_seq", sequenceName = "quasar_log_id_seq")
public class AuditLog extends AbstractLog {

    private Set<AuditLogItem> items;

    @OrderBy(clause = "date")
    @OneToMany(mappedBy = "auditLog")
    public Set<AuditLogItem> getItems() {
        return items;
    }
}
@Entity
@SequenceGenerator(name = "quasar_log_id_seq", sequenceName = "quasar_log_id_seq")
public class DocumentationLog extends AbstractLog {

    private Set<DocumentationLogItem> items;

    @OrderBy(clause = "date")
    @OneToMany(mappedBy = "documentationLog")
    public Set<DocumentationLogItem> getItems() {
        return items;
    }

}
您会注意到,ID序列生成器对于
AbstractLog
的所有扩展实体都是相同的


其目的是,在
AbstractLog
的所有扩展实体之间共享实体
Comment
。是否可以使用注释
@MappedSuperclass
?如果我使用了
@heritation
注释,那么类AbstractLog也将被创建,但我不希望这样。当前抛出引用未知实体错误。

@MappedSuperclass用于继承属性,但由于它不表示实体,因此可以使用实体关系,因此只剩下基本类型、id生成和乐观锁定版本

如果不希望基类是它自己的表(例如,每个子类的表),可以使用每个具体类的表策略。每个实体都有自己的表,继承的属性只会为Java带来方便,因为它们将在每个SQL表中重复

因此,您可以将@MappedSuperclass替换为:

@Inheritance(InheritanceType.TABLE_PER_CLASS)
但根据:

默认情况下是单表继承,每个类的表是 JPA规范的可选特性,因此并非所有提供商都支持它

Hibernate支持它,但如果您计划使用其他JPA提供程序,您可能不支持它

@Inheritance(InheritanceType.TABLE_PER_CLASS)