SQL Joins与Java代码? - java

我有这样的查询

Select Folder.name from FROM FolderTable,ValidFolder, ValidFolderGroup, ValidUser,
ValidLocation, ValidDepartment where  ValidUser.LocationCode *= ValidLocation.LocationCode         
    and ValidUser.DepartmentCode *= ValidDepartment.DepartmentCode and Folder.IssueUser =         
    ValidUser.UserId and ValidFolder.FolderType = Folder.FolderType and         
    ValidFolderGroup.FolderGroupCode = ValidFolder.FolderGroupCode and         
    ValidFolderGroup.GroupTypeCode = 13 and (ValidUser.UserId='User' OR             
    ValidUser.ManagerId='User')  and ValidFolderGroup.GroupTypeCode = 13 and             
    Folder.IssueUser = 'User' 

现在,所有以Valid开头的表都是缓存表,因此这些表已包含数据。

假设有人使用JOOQ或Hibernate,哪一个是最佳选择

将上述查询与所有联接一起使用?
还是使用Java代码满足要求而不是加入要求,因为使用HibernateJOOQ的用户已经拥有该表的Java类,而Valid表已经具有所有数据?

java大神给出的解决方案

一般回答:

现代数据库非常擅长优化查询并为您选择最佳的执行计划。给定使用*=的外部联接符号,您显然正在使用SQL Server,因此这是一个非常好的数据库。

即使您的应用程序内存中已经有很多“有效”数据,也很可能您的数据库在缓冲区高速缓存中也已经具有相同的数据,因此数据库不需要为各种连接而再次访问磁盘。您的查询。

实际上,根据数据的性质,数据库甚至可能会评估不需要某些联接(if you have the right meta data, like constraints)。

具体答案:

在您的特定情况下,看起来您确实可以自己剥离大部分查询,并使用应用程序“有效”缓存中的搜索条件仅查询Folder表。我说的是这样,因为我不完全理解这些联接背后的业务逻辑,以及它们是否全部都以1:1关系建模,或者删除它们是否会改变查询的语义。

因此,从技术上讲,您可以删除联接,但如果您想保持安全,请在迁移到jOOQ或Hibernate时保持原样。

选择3:

当然,当您将“有效”内容加载到内存中时,您甚至可以删除此查询并获取先前查询中已经存在的Folder.name属性,而不用篡改该查询。

从实体获取或创建插入语句 - java

是否存在具有值的现有实体类生成插入语句的可能性?编辑:我的意思是为实体类的实例生成一个插入语句,以单独执行该语句。提前致谢 java大神给出的解决方案 使用Fastnate,您可以为没有连接数据库的实体创建SQL语句:public String createSQL() { // Create your entity TestEntity entity = n…

java:继承 - java

有哪些替代继承的方法? java大神给出的解决方案 有效的Java:偏重于继承而不是继承。 (这实际上也来自“四人帮”)。他提出的理由是,如果扩展类未明确设计为继承,则继承会引起很多不正常的副作用。例如,对super.someMethod()的任何调用都可以引导您通过未知代码的意外路径。取而代之的是,持有对本来应该扩展的类的引用,然后委托给它。这是与Eric…

Java-如何将此字符串转换为日期? - java

我从服务器收到此消息,我不明白T和Z的含义,2012-08-24T09:59:59Z将此字符串转换为Date对象的正确SimpleDateFormat模式是什么? java大神给出的解决方案 这是ISO 8601标准。您可以使用SimpleDateFormat simpleFormat = new SimpleDateFormat("yyyy-MM…

如何修改休眠的SQL查询? - java

我有点好奇,有没有办法修改hibernate的核心,以便我可以自定义生成的SQL query。例如,在生成的查询中添加功能以使用connect by prior(oracle)或我要自定义的任何其他子句。 java大神给出的解决方案 起初,这样的问题总是在我心中敲响警钟。你被警告了...AFAIK,hibernate使用所谓的dialects进行特定的优化。…

如何使用BorderLayout(Java)扩展JTextField - java

我有一个Java程序,其中使用的是JTextField,但如果我未指定默认大小,则其宽度为0。我将其插入BorderLayout中,因此如何制作它展开以填充整个容器? java大神给出的解决方案 在上面的示例中,文本字段将正常工作。但是,如果您插入EAST或WEST,则将不起作用。import java.awt.BorderLayout; import ja…