JPA 中的异常配置到底是什么?
What is exactly a Configuration by Exception in JPA?
在一门关于 JPA 的课程中,他们说:
JPA uses configuration by exception for default relationship mapping
在这个例子中:
@Entity
public class Student {
@Id
private Long id;
private String name;
private Float rollno;
public Student()
{
}
//set of setters and getters
}
他们说:
If you do not provide @Entity and @Id annotations, still Student will behave like a POJO and not be persisted.
我需要一些帮助来理解异常这个词在这种情况下的用法。
什么是 JPA 中的异常配置?
术语 "Exception" 表示 "out of the ordinary"。所以,"Configuration by Exception" 意味着你指定了一种默认的方式来完成事情,然后如果在你的代码中的一个特定位置你想要以不同的方式做一些事情,那么你只在那个地方提供额外的配置。所以,本质上,只有那些需要与众不同的地方才需要接受额外的配置。
因此,例如,当您使用 @Access( AccessType.FIELD )
注释 JPA 实体时,您是在说 JPA 在整个实体中使用的默认访问机制应该是字段访问。这意味着 JPA 应该通过直接访问您的 class 的字段来保留您的 class。但是,如果在您的 class 中的某个时刻您有一个 getter 您希望 JPA 使用而不是一个字段,那么您可以在那个 @Access( AccessType.PROPERTY )
上指定一个额外的 @Access( AccessType.PROPERTY )
注释26=],JPA 将使用 getter.
同样,对于 JPA 支持的大多数配置选项,都有默认行为,但您始终可以自由地通过根据具体情况提供额外注释来覆盖此默认行为。
与异常配置相反的情况是,如果 JPA 要求您为每个字段指定访问类型,getter,这将非常乏味,或者如果 JPA 要求您指定所有配置事先不允许您根据具体情况选择不同的内容。
'Exception'这里指的是'Exempting your class or elements of your class from default behavior'
例如:
1) 没有像@Entity 这样的注释,上面的学生 class 是一个简单的 POJO 到持久提供者,这是默认行为。
2) 在添加@Entity 时,学生将被持久提供者视为持久实体,将 table 名称作为实体名称(即 'Student';甚至此实体名称映射到table 名称也是默认行为)。
3) 如果你想对上面的默认配置做一个例外,你希望table名称与实体名称不同,你需要做的只是用@[=注释25=] 给一个不同的 table 名称,你在你的程序中配置它。
在一门关于 JPA 的课程中,他们说:
JPA uses configuration by exception for default relationship mapping
在这个例子中:
@Entity
public class Student {
@Id
private Long id;
private String name;
private Float rollno;
public Student()
{
}
//set of setters and getters
}
他们说:
If you do not provide @Entity and @Id annotations, still Student will behave like a POJO and not be persisted.
我需要一些帮助来理解异常这个词在这种情况下的用法。
什么是 JPA 中的异常配置?
术语 "Exception" 表示 "out of the ordinary"。所以,"Configuration by Exception" 意味着你指定了一种默认的方式来完成事情,然后如果在你的代码中的一个特定位置你想要以不同的方式做一些事情,那么你只在那个地方提供额外的配置。所以,本质上,只有那些需要与众不同的地方才需要接受额外的配置。
因此,例如,当您使用 @Access( AccessType.FIELD )
注释 JPA 实体时,您是在说 JPA 在整个实体中使用的默认访问机制应该是字段访问。这意味着 JPA 应该通过直接访问您的 class 的字段来保留您的 class。但是,如果在您的 class 中的某个时刻您有一个 getter 您希望 JPA 使用而不是一个字段,那么您可以在那个 @Access( AccessType.PROPERTY )
上指定一个额外的 @Access( AccessType.PROPERTY )
注释26=],JPA 将使用 getter.
同样,对于 JPA 支持的大多数配置选项,都有默认行为,但您始终可以自由地通过根据具体情况提供额外注释来覆盖此默认行为。
与异常配置相反的情况是,如果 JPA 要求您为每个字段指定访问类型,getter,这将非常乏味,或者如果 JPA 要求您指定所有配置事先不允许您根据具体情况选择不同的内容。
'Exception'这里指的是'Exempting your class or elements of your class from default behavior'
例如: 1) 没有像@Entity 这样的注释,上面的学生 class 是一个简单的 POJO 到持久提供者,这是默认行为。
2) 在添加@Entity 时,学生将被持久提供者视为持久实体,将 table 名称作为实体名称(即 'Student';甚至此实体名称映射到table 名称也是默认行为)。
3) 如果你想对上面的默认配置做一个例外,你希望table名称与实体名称不同,你需要做的只是用@[=注释25=] 给一个不同的 table 名称,你在你的程序中配置它。