简体   繁体   中英

Hibernate annotations and foreign key relationship

I have a domain object annotated like this for hibernate support.

@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
   }

The property emailId is a foreign key referring to say emailId column in User table. Lets say i add a property like this to AppInput.java private User userDetails; How do i annotate this so that, whenever i fetch AppInput from db, the corresponding user details also get populated?

The property emailId is a foreign key referring to say emailId column in User table.

Then don't add the emailId property, add a User .

(...) How do i annotate this so that, whenever i fetch AppInput from db, the corresponding user details also get populated?

Not sure since it could be a ManyToOne or OneToOne but I'll assume it's a ManyToOne :

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

The fetch annotation element is for demonstration purpose, EAGER being actually the default value. The name and referencedColumn annotation elements in JoinColumn are also optional. Below a short summary from the JPA specification:

11.1.21 JoinColumn Annotation

The JoinColumn annotation is used to specify a column for joining an entity association or element collection.

Table 20 lists the annotation elements that may be specified for the JoinColumn annotation and their default values.

If the JoinColumn annotation itself is defaulted, a single join column is assumed and the default values described in Table 20 apply.

The name annotation element defines the name of the foreign key column. The remaining annotation elements (other than referencedColumnName ) refer to this column and have the same semantics as for the Column annotation.

If the referencedColumnName element is missing, the foreign key is assumed to refer to the primary key of the referenced table.

See the Table 20 in the spec for complete and exhaustive details.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM