Java 用于持久化JPA域对象的良好设计

Java 用于持久化JPA域对象的良好设计,java,database,design-patterns,postgresql,jpa,Java,Database,Design Patterns,Postgresql,Jpa,我有一个域对象,它存储一些元数据和一些原始字节。它用于存储二进制对象,如PDF文档和图像 我希望将元数据保存在数据库中,以便可以轻松查询,但出于性能原因,我希望将原始字节存储在文件系统中。实现这一点的好设计是什么 我是否应该有一个表示原始字节的域对象,它有自己的DAO来执行CRUD,还有一个单独的JPA DAO来对元数据执行相同的操作 如果是这种情况,元数据的域对象是否会包含对标记为瞬态的原始字节对象的引用,以便JPA不会尝试将其持久化 我是否遵循了一个过于复杂的设计,而在数据库中存储原始字节没

我有一个域对象,它存储一些元数据和一些原始字节。它用于存储二进制对象,如PDF文档和图像

我希望将元数据保存在数据库中,以便可以轻松查询,但出于性能原因,我希望将原始字节存储在文件系统中。实现这一点的好设计是什么

我是否应该有一个表示原始字节的域对象,它有自己的DAO来执行CRUD,还有一个单独的JPA DAO来对元数据执行相同的操作

如果是这种情况,元数据的域对象是否会包含对标记为瞬态的原始字节对象的引用,以便JPA不会尝试将其持久化

我是否遵循了一个过于复杂的设计,而在数据库中存储原始字节没有什么好处?我正在使用PostgreSQL 8.x,如果这有什么不同的话


非常感谢。

我真的不会这么做。你衡量过所谓的表演命中率吗?如何维护数据库中的数据和文件系统中的数据之间的事务性。e、 g.是否要写入文件系统,写入数据库,如果写入失败,则回滚文件系统更改(这不像简单地删除文件那么容易-您是否有以前版本的二进制数据?)。您如何管理数据库备份等并保持一切同步?我强烈建议将所有数据保存在一个地方


既然您正在谈论存储PDF等,也许您需要一个?

谢谢您的评论。是的,我计划在事务中包装保存,如果出现异常,删除文件并回滚数据库。你认为我应该把字节存储在数据库里吗?我认为。如果修改文档会发生什么情况。您必须回滚到上一个文件。我会将所有文档数据存储在数据库中(无论如何,在第一个实例中)。为了提高可管理性或性能,您可能希望将元数据和二进制数据分离到不同的表中——这是一个不同的问题,对于更了解数据库的人来说也是一个问题。