gpt4 book ai didi

java - 使用 JDBC 初始化类 JPA 实体

转载 作者:行者123 更新时间:2023-11-30 11:43:56 24 4
gpt4 key购买 nike

我正在为一个 Web 项目实现几个 DAO 类,由于某些原因我必须使用 JDBC。

现在我想返回这样一个实体:

public class Customer{

// instead of int userId
private User user;

// instead of int activityId
private Activity act;


// ...
}

使用 JPA useractivity 可以轻松加载(并自动指定实体之间的关系)。

但是如何使用 JDBC?有没有一种通用的方法来实现这一目标?我应该在我的 CustomerDAO 中加载 everiting 吗?是否可以为引用的实体实现惰性初始化

我的第一个想法是在我的 UserDAO 中实现:

public void initUser(Customer customer);

在我的 ActivityDAO 中:

public void initActivity(Customer customer);

初始化customer中的变量。

最佳答案

Activity 记录路线

您可以使用 AspectJ ITD 执行此操作,并实质上使您的实体成为 Active Record像物体。

基本上,您创建了一个方面,为实现名为“HasUser”和“HasActivity”的接口(interface)的类提供建议。您的接口(interface) HasUserHasActivity 将只定义 getter。然后,您将制作将编织在 getUser()getActivity() 的实际实现中的方面。

您的切面将完成实际的 JDBC 工作。尽管 AspectJ 的学习曲线最初很陡峭,但它会使您的代码更加优雅。

你可以看看我在 AspectJ ITD stackoverflow post 上的一个回答。 .

您还应该查看 springs @Configurable,它会自动将您的依赖项(例如您的数据源或 jdbc 模板)装配到非托管 spring bean 中。

当然,最好的例子是Spring Roo。 .只需查看它生成的 AspectJ 文件即可了解(假设 roo 使用 JPA)您将如何使用 @Configurable(确保使用 activerecord 注释)。

DAO 路线

如果你真的想走 DAO 路线而不是你需要这样做:

public class Customer{

// instead of int userId
private Integer userId;

// instead of int activityId
private Integer activityId;

}

因为在 DAO 模式中,您的实体对象不应该有行为。您的服务和/或 DAO 必须制作传输对象,或者您可以附加延迟加载。

关于java - 使用 JDBC 初始化类 JPA 实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11034309/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com