【问题标题】:Basic attribute type should not be IDao - intellij message基本属性类型不应该是 IDao - intellij 消息
【发布时间】:2012-10-21 13:55:44
【问题描述】:

我在我的实体对象中收到以下消息?

基本属性类型不应该是IDao

它在哪里被这样使用:

@Entity
@Table
public final class MyEnity {

    @Resource(name = "Dao")
    private IDao dao;

我知道名字不好,但是将我的 Dao(用存储库注释)注入到我的域对象中,该对象被注释为休眠实体,有什么问题?而IDao是Dao类实现的接口……

【问题讨论】:

    标签: java spring hibernate intellij-idea


    【解决方案1】:

    IDao 似乎是一个被注入实体的处理元素,您不打算保留它。如果是这样,您应该将其标记为 transient,以便 ORM 在实体上的 CRUD 操作期间将忽略它。

    @Resource(name = "Dao")
    private transient IDao dao;
    

    顺便说一句,我认为您的实体不是@Configurable。您打算如何将dao 注入其中? ORM 将使用默认构造函数创建一个 MyEntity 类型的新对象,并调用 setter 来设置数据库中的值。您的 IDao dao 不会被注入,因为这样的实例不是弹簧管理的 bean。您必须将 MyEntity 标记为 @Configurable 以使其成为 Spring 托管,以便使用 new 运算符创建的实例将获得资源注入。

    【讨论】:

    • 好的,有没有更好的方法将 dao 注入到域对象中?
    • 将资源注入使用new 运算符创建的对象的唯一方法是@Configurable (vikdor.blogspot.in/2012/08/…) 注释。
    • 我得到的印象,也许是错误的,你认为这可能不是最好的主意?我看不出你还能如何将 reposity/dao 与域对象一起使用?
    • 您通常会将您的存储库/dao 注入到您的管理器类或 servlet/action 类中。该实体要么由用户创建,要么作为用户操作的结果从数据库中检索,并且这两项都是由用户输入启动的,这些输入来自已经注入 DAO 的 servlet/action/manager,您只需使用它来与实体合作。只有在领域驱动的应用程序中,你的 DAO 才会出现在实体中,对于这样的应用程序,spring 提供了 @Configurable 注解。
    • 是的,以前我一直在将 dao 注入到我的服务层类中(虽然不是控制器/servlet)。我已经开始尝试正确实现域驱动的设计,所以@configurable 是要走的路。 .
    猜你喜欢
    • 2021-08-28
    • 1970-01-01
    • 2019-11-26
    • 2020-03-28
    • 2014-01-30
    • 1970-01-01
    • 1970-01-01
    • 2022-11-03
    • 1970-01-01
    相关资源
    最近更新 更多