Hibernate注释和外键关系

时间:2010-07-28 07:58:49

标签: java hibernate jpa orm

对于hibernate支持,我有一个这样的域对象注释。

@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表中的say emailId列。假设我将这样的属性添加到AppInput.java private User userDetails; 我如何对此进行注释,以便每当我从db获取AppInput时,相应的用户详细信息也会被填充?

1 个答案:

答案 0 :(得分:21)

  

属性emailId是一个外键,指的是User表中的say emailId列。

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

  

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

不确定,因为它可能是ManyToOneOneToOne,但我认为它是ManyToOne

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

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

  

11.1.21 JoinColumn Annotation

     

JoinColumn注释用于   指定用于加入实体的列   关联或元素集合。

     

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

     

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

     

name注释元素定义   外键列的名称。   剩下的注释元素   (referencedColumnName除外)   请参阅此栏并具有相同的内容   Column的语义   注解。

     

如果   referencedColumnName元素是   丢失,假设外键   参考的主键   参考表。

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