普通Java持久性和JavaFX表示层:类设计方法?
另一个新手问题。我有一个名为Services的RDBMS表,声明如下:普通Java持久性和JavaFX表示层:类设计方法?,java,jdbc,javafx-2,rdbms,Java,Jdbc,Javafx 2,Rdbms,另一个新手问题。我有一个名为Services的RDBMS表,声明如下: CREATE CACHED TABLE Services ( serv_id BIGINT GENERATED ALWAYS AS IDENTITY (START WITH 100) PRIMARY KEY, enc_id BIGINT REFERENCES Encounters ( enc_id ), prov_id INTEGER
CREATE CACHED TABLE Services (
serv_id BIGINT GENERATED ALWAYS AS IDENTITY (START WITH 100) PRIMARY KEY,
enc_id BIGINT REFERENCES Encounters ( enc_id ),
prov_id INTEGER REFERENCES Providers ( prov_id ),
DoS DOUBLE DEFAULT 0.0 NOT NULL,
DoP DOUBLE DEFAULT 0.0 NOT NULL,
DoR DOUBLE DEFAULT 0.0 NOT NULL
);
在处理该表中服务对象的持久性时,我编写了一个Java类,它将每个SQL字段映射到相应的Java类型字段中,也就是说,该类服务具有相同的六个字段。因为我正在开发一个在JavaFX应用程序中使用此表的应用程序,所以我为每种类型使用了JavaFX属性字段,例如
Class Service {
LongProperty serv_id = new SimpleLongProperty();
:
}
这是我现在想知道的问题
我的RDBMS表是高度规范化的,所以我几乎从不在这个级别处理实际的数据库表。在向用户显示我的服务表中的信息之前,我执行以下查询:
SELECT s.serv_id, r.rx_id, p.prov_id, s.*, sr.*, r.*,
p.lastName || ', ' || p.firstName AS provName" +
FROM Services AS s
INNER JOIN Service_RXs AS sr USING ( serv_id )
INNER JOIN RXCodes AS r USING ( rx_id )
INNER JOIN Providers AS p USING ( prov_id )
WHERE s.enc_id = ?
ORDER BY s.DoS DESC;
这个结果集有11列,或者仅仅是Services表中列数的两倍。此结果集中的信息用于TableView。因为拥有一个表示TableView数据模型的类是最佳实践,所以在我看来,我有三个选择:
- 选择1
- 选择2
- 选择3
我不可能是第一个有同样问题的人。如果我可能会问,其他人在尝试将规范化数据集调整到GUI表示层时采用了哪些解决方案?这是Hibernate/JPA帮助解决的问题吗?如果我坚持使用JDBC,那么内部类方法是一个好主意吗?从UI返回如何?我的意思是:
- 设计用户界面来完成您需要它做的事情
- 在中使用JavaFX属性创建一个支持类(模型)
- 编写DAO以在表中存储模型的属性