如何使用JPA使用另一个查找表映射表?

时间:2010-05-04 19:46:16

标签: java database orm jpa

我有两张桌子:

1)应用程序(int appid,int statusid,String appname,带有getter和Setter方法的字符串appcity)

2)App_Status(int statusid,带有setter和getter方法的String statusDescription)

我想将Application表与App_Status映射,这样我就不必单独查询App_Status表以获取statusDescription。我必须要注意的一件事是,无论Application(应用程序)表的内容是什么(插入,更新或删除),App_Status表都应该不受影响,这意味着它是一个只读表,由DBA在内部维护,仅用于查找表。

我正在使用JPA注释,请建议如何处理。

1 个答案:

答案 0 :(得分:2)

以下内容应该有效。在AppStatus表上映射App_Status实体:

@Entity
public class AppStatus {
    @Id
    private Long id;
    private String statusDescription;

    // getters, setters, hashCode, equals...
}

并在Application实体中使用一对一关联声明它:

@Entity
public class Application {
    @Id
    private Long id;
    private String appName;
    private String appCity;

    @OneToOne(fetch = FetchType.EAGER, optional = false) 
    @JoinColumn(name = "statusid", nullable = false, insertable = false, updatable = false)
    private AppStatus appStatus;

    // getters, setters, hashCode, equals...
}

特别注意以下细节:

  • 我将获取模式定义为EAGER(请注意,如果您不定义EAGER,则默认为EAGER),以便在加载AppStatus时急切地获取Application
  • 我没有定义任何级联选项,因此不会将任何操作从Application级联到AppStatus
  • 检索所有Application,使用FETCH JOIN

    FROM Application a JOIN FETCH a.appStatus