Java 我应该使用什么样的直接FK字段或实体对象?

Java 我应该使用什么样的直接FK字段或实体对象?,java,hibernate,jpa,Java,Hibernate,Jpa,我是Hibernate的新手,不知道哪种方法是最好的: @Entity @Table(name = "alumno") public class Alumno implements Serializable { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "id") private Integer id; @Column(name = "salon_id"

我是Hibernate的新手,不知道哪种方法是最好的:

@Entity
@Table(name = "alumno")
public class Alumno implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id")
    private Integer id;

    @Column(name = "salon_id")
    private Integer salonId;

}
其中,salonId字段映射到数据库字段,该数据库字段是引用Salon表id的fk,或者:

@Entity
@Table(name = "alumno")
public class Alumno implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id")
    private Integer id;

    private Salon salon;

}

一个与另一个相比有哪些优点?

您当然应该使用第二个。实体和ORM的关键在于能够从数据库加载对象图,并在对象图中导航:

Alumno alumno = em.find(Alumno.class, id);
Salon salon = alumno.getSalon();

在这种情况下,您需要在沙龙字段上添加
@ManyToOne
@OneToOne
注释(取决于协会的实际基数)。

对不起,我编辑了它们。我什么时候应该使用其他方法?我找不到任何使用其他方法的理由。这样做会加载所有沙龙的属性,对吗?或者只是加载联接列值?请阅读hibernate文档。它会将沙龙加载到OneToOne is Earneg(默认情况下为Earneg)中。如果将其设置为惰性,则它将仅加载FK,并在对Salon对象调用方法时加载Salon属性。