我有以下方法.
public Profile readUser(String email){
EntityManager em = EMF.get().createEntityManager();
return em.find(Profile.class, email);
}
Run Code Online (Sandbox Code Playgroud)
以上是实体经理的用法吗?或者有必要关闭他们?请提出任何建议.
我遇到了像大多数尝试使用ORM进行远程处理的人一样的LazyLoading异常.在大多数情况下,切换到急切的提取解决了问题(延迟加载/非原子查询/线程安全/ n + 1问题......).但是,如果你正在处理一个非常大的对象图,那么急切的提取也会有缺点.
在大多数用例中不需要加载整个对象图.加载需要的更多数据(或从数据库加载数据并提取所需的子集)感觉很糟糕.
那么有什么替代方法可以解决这类问题(在运行时)?
我见过:
我想了很多其他的方式.也许通用投影white./black listning是一个解决方案.
Idea(黑名单):使用提取操作的边界定义类名列表.如果属性匹配并且它是惰性的,则删除惰性(CGLIB)代理并使用null填充该值.否则,简单地防止获取(并将值保留为null).因此,我们可以在DAO中设置明确的界限.
示例:ProductDao.findByName("Soap",Boundaries.BLACKLIST,"Category, Discount")
最后两个参数也可以绑定到Boundaries对象中.
Idea(白名单):与黑名单一样,但您必须声明属性应加载到白名单中.
您如何看待这样的解决方案?(可能的问题,限制,优点......)我应该如何在java中编写这个?也许通过AOP来匹配DAO方法(因为我能够在那里修改cglib代理行为)?
我开始学习Java开发(我以前用C++开发),我正在使用一些旧的材料,但是,我还想跟上Java的发展和建议.
我做了一些关于Swing和JavaFX的背景研究.我了解到JavaFX脚本的开发已经停止,但FX的第2版正在开发中,所以我不确定这最终会是什么,因为我认为脚本是标准的主要部分.
使用Netbeans时,我发现Swing的进一步开发是停止,Netbeans支持也是如此(JSR-296).Netbeans建议转移到我不愿意做的Netbeans Platform API,因为我想学习Java作为一种真正的跨平台语言而不是与任何细节联系在一起.
这让我想问一下在Java世界中开发GUI的首选新方法是什么?
我正在使用SWING开发单声道用户桌面应用程序.我对使用java.sql api的这种应用程序有一点经验,并且发现它根本不舒服......
在我的新应用程序中,我第一次尝试使用JPA,我已经阅读了很多教程,这些教程让我理解了我所需要的几乎所有东西,但没有找到真正的Java桌面应用程序的好例子.
我正在考虑使用以下架构,但不知道我是否正确......
我想创建一个MyPersistenceUnit类:
public class MyPersistenceUnit {
private static EntityManagerFactory factory;
private static EntityManager entityManager;
public static void initiate(){
factory=Persistence.createEntityManagerFactory("PU_Name");
entityManager=factory.createEntityManager();
}
public static EntityManager getEntityManager() {
return entityManager;
}
public static void close(){
entityManager.close();
factory.close();
}
}
Run Code Online (Sandbox Code Playgroud)
activate()方法将是第一个被调用的方法,并且当应用程序关闭时将调用close()方法.
在应用程序运行时,所有事务都将通过getEntityManager()实例完成,该实例可在应用程序的每个位置访问.如果我对JSE应用程序的理解是正确的,那么获得的实体管理器有一个扩展的持久化上下文,它将使所有实体保持在托管状态,而实体管理器不会被关闭,这就是让我这样思考的原因......
我不知道我是否遗漏了什么,所以任何小费都会受到赞赏
请注意,我正在使用eclipselink提供程序和derby嵌入式数据库.
谢谢
我使用Eclipse插件Visual Editor来构建Java Swing接口.由于我不是代码WYSIWYG(UI)编辑器生成的忠实粉丝,我想优化它,当我注意到,编辑器使用延迟加载实现所有元素,如下所示:
private JPanel getSomePanel ()
{
if ( somePanel == null )
{
somePanel = new JPanel();
// construct the panel
}
return somePanel;
}
Run Code Online (Sandbox Code Playgroud)
我知道,当不立即使用有问题的对象时,延迟加载用于获得更好的性能.然而,对于大多数用户界面而言,这没有多大意义,因为例如窗口通常应该从一开始就显示其上的所有组件.在我的情况下也是如此,我有一个相当简单的清晰布局,其中所有组件在显示窗口时都应该存在.
Visual Editor initialize在根容器的构造函数中添加了一个调用,其中构造了根面板并添加了所有其他元素(通过延迟加载).因此,实际上所有组件都是在构造根容器时创建的,只是嵌套在多个方法中.
在这种情况下,是否有任何延迟加载的用途?我应该在哪些UI情况下使用延迟加载?当使用延迟加载时,我实际上甚至允许直接访问成员变量 - 或者我应该每次都调用getter?
谢谢!
java ×5
jpa ×3
lazy-loading ×2
swing ×2
eclipselink ×1
javafx ×1
jsr296 ×1
netbeans ×1
orm ×1
remoting ×1