您实体的ID是 长 (原始类型)还是 长 (对象类型)?
选择什么? 长还是长?
@Entity
@Table(name = "COUNTRY")
public class CountryEntity implements java.io.Serializable {
private static final long serialVersionUID = 1L;
@Id
@Column(name = "ID")
private long id;
@Column(name = "NAME")
private String name;
@Column(name = "CURRENCY")
private String currency;
@Column(name = "PEOPLE")
private Long people;
@Column(name = "SIZE")
private Long size;
public CountryEntity() {
}
我认为使用Long更好,因为通过检查该null
值来检查实体是否具有持久身份是更正确的(在MySQL中,您可以将ID设置为0)。另外,像Spring这样的某些库在其逻辑中也基于Long类型的ID(默认情况下)。有关示例,请参见此实现。
原语的小优点:占用的空间更少。
PS:根据JPA规范,两者都是正确且受支持的,并且此问题的答案以某种方式基于观点。
问题内容: 我有一个具有以下结构的数据库: 当我尝试创建EntityProperty类时 我得到以下异常: 我知道JPA实体必须具有主键,但是由于无法控制的原因,我无法更改数据库架构。是否可以创建将与这样的数据库模式一起工作的JPA(hibernate)实体? 问题答案: 我猜您有一个组合键,其中的外键是。如果是这样,则可以按如下所示进行映射:
我有以下三个实体: 父: 孩子: 孙子: 当我调用,我会得到一个带着孩子和孙子孙女的父母。然而,这将导致两个问题: > 无限递归因为所有实体都包含对彼此的引用。 来自Hibernate的不必要的查询,因为我的只包含
问题内容: 有谁知道我该如何在hibernate状态下做到这一点: 使用JPA? EntityManager有一个contains方法,但仅此而已! 我正在编写一些代码,充当实体和会话中存储的数据之间的转换器(因此,不是存储序列化的对象,而是仅存储类名和ID)。 问题答案: 有谁知道我可以用JPA在hibernate(…)中做到这一点? JPA 1.0没有等效的功能,因此如果您坚持使用JPA 1.
我试图创建一个注册用户的功能。 我遵循了这篇文章中的建议:将空作为id保存,并Hibernate,但解决方案对我不起作用。这是我的用户类 这是我的账户类 我的日志显示了以下输出
问题内容: 是首选使用“ Id”作为主键的列名还是使用“ [TableName] Id”作为命名约定? 表:帐户 主键:ID - 相对 - 表:帐户 主键:AccountId 在我所看到的实现中,似乎分成了大约50%/ 50%。每种方法的优点和缺点是什么? 跟进: 在我的数据库中使用一种约定,在代码中对我的实体使用另一种约定是否有意义?还是应该让它们保持一致?在大多数ORM中,这如何最好地工作?
问题内容: 如果我回滚,会话中的实体会怎样?他们会在交易之前回到状态吗?特别是他们会获得新的ID吗? 例: 更新 : 我已经进行了Hibernate 4测试。测试后,该实体已成为新的ID。 问题答案: 我将简单地引用JPA实现(3.3.2事务回滚): 对于事务范围和扩展的持久性上下文,事务回滚都会导致所有先前存在的托管实例和已删除实例[31]分离。实例的状态将是事务回滚时的实例状态。事务回滚通常会