当前位置: 首页 > 面试题库 >

JPA实体ID-long或Long

唐威
2023-03-14
问题内容

您实体的ID是 (原始类型)还是 (对象类型)?

  • 该ID是表的主键,在数据库中从不为“ null”。
  • 我的同事建议使用“对象类型长”。
  • 默认情况下,Hibernate反向工程工具会生成一个长为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]分离。实例的状态将是事务回滚时的实例状态。事务回滚通常会