这是一个非常开放的问题.我将开始一个新项目,我正在寻找与数据库访问集成的不同ORM.
你有什么收藏吗?你有没有建议保持清醒?
对于我开发的一些应用程序(然后继续忘记),我一直在编写纯SQL,主要用于MySQL.虽然我在SQLAlchemy中使用了python中的ORM ,但我并没有坚持使用它们.通常是文件或复杂性(从我的观点来看)阻碍了我.
我看是这样的:使用ORM来实现可移植性,如果它只是使用一种类型的数据库则使用普通SQL.在开发需要数据库支持的应用程序时,我真的在寻找何时使用ORM或SQL的建议.
考虑到这一点,使用轻量级包装来处理数据库不一致与使用ORM相比会好得多.
有人建议我为我正在设计的项目使用ORM,但是我无法找到有关它是什么或它是如何工作的信息.任何人都可以给我一个简短的解释或链接,我可以在哪里了解更多信息吗?
对我来说,我会根据我的经验回答这个问题.
所以,如果我要开始新项目,我会使用以下技术:
当然,您可能需要使用一些辅助框架/库,例如:
在测试方面,我将考虑以下框架:
其他人可以提出其他选择吗?
我正在研究我的一个(相当大的)宠物项目,一个Swing应用程序,它本质上需要多线程.几乎所有用户交互都可能通过互联网从某些远程服务器获取数据,因为我既不控制这些服务器也不控制互联网本身,因此长时间的响应时间是不可避免的.当EDT繁忙时,Swing UI显然无法重绘自身,因此所有远程服务器调用都需要由后台线程执行.
我的问题:
后台线程获取的数据使用来自本地(内存)数据库的数据"丰富"(远程服务器返回ID /对本地数据库中数据的引用).这些数据最终会传递到EDT,在那里它成为视图模型的一部分.此时某些实体未完全初始化(启用了延迟抓取),因此用户可能通过例如在JTable中滚动来触发延迟抓取.由于hibernate会话已经关闭,这将触发LazyInitializationException.我不知道什么时候用户可能会触发延迟抓取,因此按需创建会话/附加分离的对象在这里不起作用.
我通过以下方式解决了这个问题:
虽然这有效,但应用程序的性能却遭受了很大的损失(有时几乎无法使用).减速主要是由每个查询现在提取的大量对象引起的.
我目前正在考虑将应用程序的设计更改为"每个线程的会话",并将非EDT线程提取的所有实体迁移到EDT线程的Session(类似于Hibernate论坛上的这个帖子).
附注:与数据库更新相关的任何问题都不适用,因为所有数据库实体都是只读的(参考数据).
关于如何在这种情况下使用延迟加载Hibernate的任何其他想法?