我正在使用一个框架,其中显示在每个网页上的字段是在应用程序数据库中定义的。管理员可以向页面添加新字段或隐藏/完全删除旧字段。每个页面的逻辑都在Java类中--有时一个页面和一个类之间存在一对一的关系,有时几个页面使用同一个类。
The issue
这个框架设计在数据库中的页面数据和Java类中的逻辑之间创建了一个隐藏的依赖关系。如果将一个新字段添加到页面中,则匹配的Java类必须提供该字段--否则页面将中断。Java代码对于如何在数据库中配置页面(每个客户数据库可能有不同的配置)没有编译时知识,这会增加脆性。
一个典型的解决方案是从一个或多个数据库表中选择*,允许在一定程度上配置可以显示哪些字
最初,我想在我的模型中映射MongoDB的_id。例如:
case class User(_id: Option[BSONObjectID], ...)
然而,这导致了很多问题,因为我必须在插入用户文档后设置_id。因此,我用Java的UUID类替换了这个属性。这意味着我的模型中将只有id,数据库中将只有_id和id。我现在开始在我的所有模型中使用它,因为我认为在我的模型中存储与数据库相关的信息是一个糟糕的实践(如果我切换到SQL数据库呢?)。对于我的所有文档,我是否可以使用UUID%s作为_id的有效替代?
我有一个带有Hibernate和SQLite方言的java项目。此外,我还有一个模型,它有很多模型元素之间的链接。当我想在DB中存储更多的数据时,我会得到一个不规则的堆栈溢出。有时候很管用。有时它不起作用。为什么会这样呢?
例外情况:
at sun.nio.cs.SingleByte.withResult(未知来源)
at sun.nio.cs.SingleByte.access$000(Unknown Source)
at sun.nio.cs.SingleByte$Encoder.encodeArrayLoop(Unknown Source)
at sun.nio.cs.SingleB
我应该在哪里保存派生字段的逻辑(派生自同一模型类的属性)--在模型层还是在服务层?
示例:
在下面的代码中,年龄是从dateOfBirth派生的(在模型类中可以从dateOfBirth派生的时候,不要问为什么需要持久化年龄--这是一个假设的例子)。我应该将calculateAge()方法保存在哪里-在PersonModel还是PersonService中?
import java.util.Date;
models/Person.java
@Entity
public class Person {
private Date dateOfBirth;
privat