我知道这个问题已被无数次提出,但由于关于这个问题的大多数问题都是6-7岁,我希望看到原来的论点是否有任何变化/更新版本的JPA出来了.我知道这可以被视为主要基于意见,但我正在寻找一个利弊列表.
有些人认为实体管理器本身就是DAO,并且应用程序中的DAO层将是多余的.大多数人都同意EntityManager
覆盖基本的CRUD操作非常紧密......但有一点我们不应该entitymanager.createQuery(...)
在服务层内部使用.
但现在使用@NamedQueries
注释,我们可以简单地将命名查询添加到模型类,并为每个实体模型维护一组自定义条件查询.例如,如果我们有一个User
课程,我们可以有类似的东西
@Entity
@NamedQueries({
@NamedQuery(name="User.findByUsername", query="SELECT u FROM User u WHERE u.username_lowercase = LOWER(:username)")
})
public class User{
@Column
private String username;
}
Run Code Online (Sandbox Code Playgroud)
通过在模型类中存储自定义条件查询,我们可以避免在服务层中反复重写相同的查询 - 这使得DAO层现在看起来更加不必要.
我发现包含DAO层的原因现在是:
我想知道是否有人可以贡献这个列表,因为我不确定我是否应该在我的应用程序中使用DAO层
所以我在OCaml中有三个功能
let my_A = my_C
let my_B = my_A
let my_C = my_B
Run Code Online (Sandbox Code Playgroud)
函数A调用函数C.函数B调用函数A.函数C调用函数B.
我尝试使用"和"使它们相互递归(因此它们可以相互调用),如:
let my_A = my_C
and
my_B = my_A
and
my_C = my_B
Run Code Online (Sandbox Code Playgroud)
但它说
"未绑定的值my_C in __"
它基本上是说:"嘿,你不能打电话my_C
的my_A
",但我不明白为什么?我不允许将三个功能链接在一起吗?
我正在尝试加载一些基本的用户信息,这些信息应该可用于每个 HTTP 请求。我读到我可以使用带有 @ModelAttribute 方法的 @ControllerAdvice 类来做到这一点。例如:
@ControllerAdvice
public class DefaultController{
@ModelAttribute
public void load(ModelMap model){
}
}
Run Code Online (Sandbox Code Playgroud)
但是,我无法访问由 Spring Security 管理的 Principal 对象。我尝试了以下方法:
@ModelAttribute
public void load(ModelMap model, @AuthenticationPrincipal CustomUser user){
}
Run Code Online (Sandbox Code Playgroud)
和
@ModelAttribute
public void load(ModelMap model, Principal user){
//Cast to CustomUser object
}
Run Code Online (Sandbox Code Playgroud)
但是这两种方法都不起作用。我为用户对象获取空值。我想知道是否有人知道如何在 @ModelAttribute 方法中获取 Principal 对象