JPA中的“异常配置”究竟是什么



在一门关于JPA的课程中,他们说:

JPA通过异常使用配置用于默认关系映射

在本例中:

@Entity
public class Student {
    @Id
    private Long id;
    private String name;
    private Float rollno;
    public Student()
    {
    }
    //set of setters and getters
}

他们说:

如果您不提供@Entity和@Id注释,那么Student的行为将像POJO一样,并且不会被持久化。

我需要一些帮助来理解"异常"一词在这个上下文中的用法。

JPA中的异常配置是什么?

术语"异常"的意思是"不同寻常"。因此,"异常配置"意味着您指定了一种特定的默认方式来完成任务,然后如果在代码中的某个特定位置,您希望以不同的方式完成任务,那么您只在该位置提供额外的配置。因此,本质上,只有那些需要特殊配置的地方才需要接受额外的配置。

因此,例如,当您用@Access( AccessType.FIELD )注释JPA实体时,您是在说JPA在整个实体中使用的默认访问机制应该是字段访问。这意味着JPA应该通过直接访问类的字段来持久化类。但是,如果在类中的某个时刻,您希望JPA使用一个getter而不是一个字段,那么您可以仅在该getter上指定一个额外的@Access( AccessType.PROPERTY )注释,JPA将使用该getter。

类似地,对于JPA支持的大多数配置选项,都有默认行为,但您始终可以通过根据具体情况提供额外的注释来覆盖此默认行为。

如果JPA要求您为每个字段和getter指定访问类型,这将非常乏味,或者如果JPA需要您提前指定所有配置,而不允许您根据具体情况选择不同的配置,则与异常配置相反。

此处的"异常"指的是"免除类或类的元素的默认行为"

例如:1) 在没有任何像@Entity这样的注释的情况下,上面的学生类对持久提供者来说是一个简单的POJO,这是一种默认行为。

2) 在添加@Entity时,学生将被持久提供者视为持久实体,表名为实体名(即"学生";即使是映射到表名的实体名也是默认行为)。

3) 如果您想对上述默认配置进行例外处理,即您希望表名称与实体名称不同,您所需要做的只是用@table进行注释,以提供不同的表名称,您正在程序中对其进行配置。

最新更新