java - 如何使用 JPA 将一个表与另一个查找表映射?

标签 java database orm jpa

我有两个表:

1) Application(int appid, int statusid, String appname, String appcity with getter 和 Setter 方法)

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

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

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

最佳答案

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

@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 是默认值),以便在加载时立即获取 AppStatus 申请
  • 我没有定义任何级联选项,因此不会有任何操作从 Application 级联到 AppStatus
  • 要检索所有Application,请使用 FETCH JOIN

    FROM Application a JOIN FETCH a.appStatus
    

关于java - 如何使用 JPA 将一个表与另一个查找表映射?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2768493/

相关文章:

Java 从 int 到 byte 可能出现的有损转换错误

java - 尝试从从 sqlite 中提取的对象列表中调用方法时的空对象引用

sql - 存储过程的模式?

python - 从 cx_oracle 执行一个 sql 脚本文件?

java - Hibernate 可以生成大写 SQL 吗?

php - 如何使用 Doctrine QueryBuilder 或 EntityManager 通过多对多相关实体查找实体

java - 如何在JSP页面: java. sql.SQLException中连接到MySQL:用户 'root' @'localhost'的访问被拒绝

java - 如何模拟图灵机?

java - 数据库值插入错误

node.js - 如何在sequelizejs中创建具有关联的模型实例?