【问题标题】:Can I inject an instance of a model class annoted with @Entity into a controller using Spring?我可以使用 Spring 将带有 @Entity 注释的模型类的实例注入到控制器中吗?
【发布时间】:2023-03-21 13:58:01
【问题描述】:

我是春天的新手,我有以下疑问。在 Web 应用程序中,我有以下映射数据库表的实体类:

@Entity
@Table(name = "KM_PROJECT_INFO")
public class KM_ProjectInfo implements Serializable {

    @Id
    @GeneratedValue
    private Long idProjectInfo;

    @Column(name = "name")
    private String name;

    @Column(name = "technology")
    private String technology;

    @ManyToOne
    @JoinColumn(name = "idCountry")
    private KMCountry country;

    @Column(name = "power")
    private long power;

    @Column(name = "cod")
    private String cod;

    @ManyToOne
    @JoinColumn(name = "idProjectInfoStatus")
    private KM_ProjectInfoStatus status;

    @Column(name = "folderTech")
    private long folderTech;

    @Column(name = "folderProject")
    private long folderProject;

    // GETTER & SETTER
}

在视图中有一个表单,用户可以在其中插入前一个实体类的字段值。当用户点击这个表单的提交按钮时,它会执行一个控制器的动作(在特定情况下它是一个 Struts 2 动作控制器,但我认为这并不重要)。

在此操作中,我必须检索用户在表单字段中插入的值,并使用这些值来设置前一个实体类的匹配字段,然后我必须使用 Hibernate 将其保存在数据库中。

所以我的疑问是:以前的实体类是使用 @Entity 注释进行注释的。我可以简单地将它注入我的控制器吗?我可以注入带有 @Entity 注释的类的实例吗?

Tnx

【问题讨论】:

  • 如果您遵循 mvc 模式,那么它可能会破坏该模式。

标签: java spring hibernate spring-mvc annotations


【解决方案1】:

你可以做到这一点',不会自动发生,因为@Entity 没有将一个类标记为一个spring bean。您可以将其设为 Spring bean,但 Spring 框架将接管管理实体对象的生命周期,这应该是 JPA 框架的专有角色。以合理的方式完成这项工作将是一场可怕的斗争。

幸运的是,根据您的描述,您不需要这样做,只需创建实体的实例,使用表单参数填充它并将对象传递给您的服务或 DAO。

【讨论】:

    【解决方案2】:

    您只需要使用简单的 java 对象创建来创建对象:

    KM_ProjectInfo obj = new KM_ProjectInfo();
    

    然后使用setter方法设置属性和做数据库操作。您不需要使用 spring bean 创建。

    【讨论】:

      【解决方案3】:

      您无需将其作为 Spring bean 注入到您的控制器中。

      • 只需创建实体的一个实例。
      • 根据表单参数设置实体字段。
      • 将实体保留在数据库中。

      【讨论】:

        猜你喜欢
        • 2012-06-16
        • 1970-01-01
        • 2014-04-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-05-07
        • 1970-01-01
        相关资源
        最近更新 更多