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

Java 如何使用JPA将一个表映射到另一个查找表?,java,database,orm,jpa,Java,Database,Orm,Jpa,我有两张桌子: 1) 应用程序(使用getter和Setter方法的int-appid、int-statusid、String-appname、String-appcity) 2) App_Status(int statusid,带setter和getter方法的字符串statusDescription) 我想将应用程序表映射为应用程序状态,这样我就不必为了获取状态描述而单独查询应用程序状态表。我必须注意的一点是,无论对应用程序表执行什么操作(插入、更新或删除),App_状态表都应不受影响,这意

我有两张桌子:

1) 应用程序(使用getter和Setter方法的int-appid、int-statusid、String-appname、String-appcity)

2) App_Status(int statusid,带setter和getter方法的字符串statusDescription)

我想将应用程序表映射为应用程序状态,这样我就不必为了获取状态描述而单独查询应用程序状态表。我必须注意的一点是,无论对应用程序表执行什么操作(插入、更新或删除),App_状态表都应不受影响,这意味着它是一个只读表,由DBA内部维护,仅用于查找表


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

以下内容应该可以使用。在
App\u Status
表上映射
AppStatus
实体:

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

    // getters, setters, hashCode, equals...
}
并在
应用程序
实体中用一对一关联声明:

@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...
}
请特别注意以下细节:

  • 我将fetch模式定义为
    EAGER
    (注意,如果没有定义,EAGER是默认模式),这样在加载
    应用程序时,
    AppStatus
    将被急切地获取
  • 我没有定义任何级联选项,因此不会将任何操作从
    Application
    级联到
    AppStatus
  • 要检索所有
    应用程序
    ,请使用FETCH连接

    FROM Application a JOIN FETCH a.appStatus
    

感谢您的快速回复。我必须添加一些额外的代码才能使其正常工作。仅供参考:附加代码是:@JoinColumn(name=“statusid”,insertable=false,nullable=false,updateable=false),因此当您定义@JoinColumn时,必须将insertable和updateable指定为false。