【问题标题】:Hibernate annotations and foreign key relationshipHibernate注解和外键关系
【发布时间】:2010-07-28 07:58:49
【问题描述】:

我有一个这样注释的域对象以支持休眠。

@Entity
@Table(name = "INPUT")
public class AppInput {

  /**
   * Unique id for this request
   */
  @Id
  @GeneratedValue
  @Column(name = "INPUT_ID")
  private long requestId;
  /**
   * 
   */
  @Column(name = "EMAIL_ID")
  private String emailId;
  /**
   * 
   */
  @Column(name = "REQUEST_DATE")
      private Date requestDate;
  /**
    * 
   */
  @Column(name = "INPUT_STATUS")
   private char status;
  /**
   * 
   */
   @Column(name = "EXPECTED_ORDER_DATE")
  private Date expectedOrdDt;

//Getter and setters
   }

属性 emailId 是一个外键,引用 User 表中的 emailId 列。假设我将这样的属性添加到 AppInput.java private User userDetails; 我如何对此进行注释,以便每当我从 db 获取 AppInput 时,也会填充相应的用户详细信息?

【问题讨论】:

    标签: java hibernate jpa orm


    【解决方案1】:

    属性 emailId 是一个外键,引用 User 表中的 emailId 列。

    然后不要添加emailId属性,添加User

    (...) 我如何对此进行注释,以便每当我从 db 获取 AppInput 时,相应的用户详细信息也会被填充?

    不确定,因为它可能是 ManyToOneOneToOne,但我会假设它是 ManyToOne

    @ManyToOne(fetch=FetchType.EAGER)
    @JoinColumn(name="USERDETAILS_EMAIL_ID", referencedColumnName="EMAIL_ID")
    private User userDetails;
    

    fetch 注释元素用于演示目的,EAGER 实际上是默认值。 JoinColumn 中的 namereferencedColumn 注释元素也是可选的。下面是 JPA 规范的简短摘要:

    11.1.21 JoinColumn注解

    JoinColumn 注解用于 指定用于连接实体的列 关联或元素集合。

    表 20 列出了注释元素 可以指定为 JoinColumn注解及其 默认值。

    如果JoinColumn注解本身 默认情况下,单个连接列是 假定值和默认值 表 20 中描述的适用。

    name 注释元素定义 外键列的名称。 剩余的注释元素 (referencedColumnName除外) 参考这个专栏和有相同的 Column 的语义 注解。

    如果 referencedColumnName 元素是 缺少,外键被假定为 参考主键 引用表。

    有关完整和详尽的详细信息,请参阅规范中的表 20

    【讨论】:

    • 是的,它是多对一的。我尝试了代码,它说 fetch 不是一个有效的属性。我尝试删除它,它说“MappingException。无法确定 a.b.c.User 的类型”
    • @user378101:小错字,fetchManyToOne 的注释元素。关于第二个错误,User 似乎不是一个实体(您需要使用@Entity 对其进行注释并在您的persistence.xml 中声明它)。只有实体可以用于关联。
    • 我怀疑这一点,但 User 类已经用 @Entity 注释了。
    • @user378101:你能展示User类吗?您确定在应用程序启动时没有收到任何错误消息(会阻止 User 正确映射)吗?
    • 谢谢,现在可以使用了。我已经注释了 getUser 方法。尝试注释该字段并且它有效。有什么区别?
    猜你喜欢
    • 1970-01-01
    • 2012-06-03
    • 2012-07-13
    • 2020-08-05
    • 1970-01-01
    • 1970-01-01
    • 2012-03-22
    • 2020-06-25
    • 1970-01-01
    相关资源
    最近更新 更多