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

休眠映射:子对象属性上的OneToMany和OneToOne

惠洛华
2023-03-14
问题内容

这是父类Enterprise。它有雇主,其中一位是企业总裁。

@Entity
class Enterprise
{
   // fields

   @OneToMany
   public List<Employee> getEmployers()
   // implementation

   @OneToOne
   public Employee getPresident()
   // implementation

}

这是子雇员类。它仅提供有关Enterprise的信息。但是问题是我应该使用哪种关联?

@Entity
class Employee 
{
   // fields

   // what association should I use?
   public Enterprise getEnterprise()
   // implementation
}

问题答案:

假设您已使用定义了Enterprise-> Employers关联@OneToMany,这意味着an
Employer仅属于一个Enterprise,则应使用@ManyToOne,意味着每个都Employer属于max。1
Enterprise,但是Enterprise可以参考很多Employers

您可以使用mapped-by注释中的属性仅在一侧之一中定义关联细节(连接列等):

@Entity
class Enterprise
{
   @OneToMany(mapped-by="enterprise")
   public List<Employee> getEmployers()
   // implementation

   @OneToOne
   public Employee getPresident()
   // implementation
}

@Entity
class Employee 
{
   @ManyToOne
   @JoinTable ( name="Enterprise", joinColumns={ @JoinColumn(name="ENT_ID", referencedColumnName="ENT_ID") }
   public Enterprise getEnterprise()
   // implementation
}

在情况下Employer可能是一个不同的总裁Enterprise,他采用(似乎不太可能,除非你可以是一个企业的总裁,而不被它采用的),并且如果你需要访问Enterprise它的Employer是总统从Employer实体,您可能需要添加另一个关联,理想情况下是这样@OneToOne(您会遇到问题,因为@OneToOne关系要求两个实体都具有相同的@Id类)。在这种情况下,出于实际原因,我将使用注释该getPresidedEnterprise()方法。Employer``@ManyToOne



 类似资料:
  • 问题内容: 警告 :请在下面查看我自己的答案。此问题是由10.2.0.4之外的类路径中存在的旧Oracle驱动程序引起的。问题解决了。这个问题的其余部分留给后代。 我一直在反对以下观点。这是从我的应用程序代码中提取的一个简单的POJO: 有一个String属性和一个CLOB列。当内容很短时(例如“ hello world”),它会持续存在。对于更长的字符串,我得到以下异常: 我将Hibernate

  • 问题内容: 我有一堂课; 我还有一节课; 我将如何搜索Student ,名字John,lastName Doe? 如果是出生日期属性,我将在日期上创建一个并添加一个相等限制()。我将如何对AppUser对象中的lastName和firstName进行操作? 问题答案: 查询: 要使用条件,请检查此线程 还可以从hibernate文档中查看此页面

  • 问题内容: 通用实体,超类: pojo: 我尝试使用那些注释:@ AttributeOverride,@ Id等,但是它不起作用。你能帮助我吗?我想覆盖属性“ id”以通过pojo / table指定另一个列名和一个序列。最好的方法是什么? 问题答案: 试试这个,代替

  • 问题内容: 这是我在堆栈上的第一个问题,请保持温柔:D 我正在尝试创建休眠的OneToMany关系。当我尝试从数据库中获取一些数据时,出现了StackOverflowError。但是,当我删除OneToMany部分时,一切正常。这是我的REST服务的一部分,目前它可以在VMware vFabric Server和MySQL DB上运行。 获取示例: MySQL脚本: 类: 错误: 编辑: 感谢@T

  • 问题内容: 我需要预先将没有实现接口的枚举映射到现有数据库,该数据库使用将该枚举存储在与所有者类相同的表中。 在这种情况下应如何处理映射?持久化到数据库不会改变,因为实现该接口的所有枚举都将具有不同的值,但是我不确定应如何从数据库中检索对象(我是否需要自定义映射器,它将尝试实例化一个使用指定的enum类进行枚举吗?Hibernate是否本身支持此功能?)。 问题答案: 可以创建一个自定义(例如th

  • 问题内容: Hibernate提供的注释支持使用或两种类型的映射。当我们使用映射时,它使用的“名称” 而不是Enum 的表示形式。在数据库列仅包含一个字符的情况下,这是一个问题。例如,我有以下枚举: 当我坚持枚举使用,即休眠尝试在数据库中存储的值是开放的。但是,我的数据库列仅包含一个字符,因此会引发异常。 克服这个问题的一个办法是改变枚举类型持有单个字符(如,代替,)。但是,这降低了可读性。有什么