这些 JPA 注释是什么意思?

What do these JPA annotations mean?

能否请您用通俗易懂的 "human" 语言解释一下这些注释的含义。我不需要文档,我只想听到类似 tAttr table 通过主键 InstitID 与 tInstit table 连接的内容,约束如下等等。 SQL 语言没问题 :) 我有点困惑。谢谢

我有这个映射class

    @Entity
    @DiscriminatorValue("Individual")
    @SecondaryTable(schema = "dbo", name="tAttr", pkJoinColumns = {@PrimaryKeyJoinColumn(name = "InstitID")})
    public class FaIndividual extends FaClient 

它扩展了这个:

@Entity
public abstract class FaClient extends FaInstit

及以上扩展

@Entity
@Immutable
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorFormula(
    "CASE "
        + "WHEN ((InstType = 0) AND (PropDeal = 0)) THEN 'Individual' "
        + "WHEN ((InstType = 0) AND (PropDeal = 1)) THEN 'Legal' "
        + "WHEN (InstType = 1) THEN 'Bank' "
        + "WHEN (InstType = 2) THEN 'Subdivision' "
    + "END"
)
@Table(schema = "dbo", name = "tInstit")
@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, include = JsonTypeInfo.As.PROPERTY, property = "@class")
public abstract class FaInstit

你的 classes FaInstit (<--Extends) FaClient (<-- Extends) FaIndividual 都被注释 @Entity 这意味着这些是持久性 classes,它们的字段映射到 DB tables/columns.

在您的超级 class FaInstit 中,您指定继承层次结构中的所有实体都将共享相同的主 table - dbo.tInstit – 与注释 @Inheritance(strategy = InheritanceType.SINGLE_TABLE)

当对所有实体使用单个 table 时,您需要将 table 中的每条记录标识为属于 class 中的一个或另一个。这是通过 @DiscriminatorColumn 完成的(如果您跳过此注释,将选择默认列名)。 DiscriminatorColumn 中的值可以使用 @DiscriminatorValue 注释指定。因此,每当您坚持使用 FaIndividual 时,DiscriminatorColumn 中的值将是 Individual.

有时我们需要一个实体映射到多个 table。您示例中的主要 table 是 dbo.tInstit,但我们可以使用 @SecondaryTable 注释定义任意数量的次要 table。您已在 FaIndividual 中完成此操作,您应该在 class 的定义(未显示)中看到 class 的字段映射到 table 中的任何一个。 secondarytable使用的行由@SecondaryTable属性中的join信息定义;

pkJoinColumns = {@PrimaryKeyJoinColumn(name = "InstitID")}

所以我们有一个连接 where dbo.tInstit.ID = dbo.tAttr.InstitID,JPA 将 update/read 根据这个连接信息等跨越两个 table 的实体字段。

您已声明

I don't want documentation

但恐怕这正是您所需要的,因为这里有很多东西要学。我建议挖掘一些 tutorials/examples 涵盖这种领域。

我希望这能让你继续下去。