Java @组件休眠类

Java @组件休眠类,java,spring,hibernate,jpa,entity,Java,Spring,Hibernate,Jpa,Entity,我在程序中休眠了带注释的类。因为我正在运行一个Spring项目,所以我已经将它们包含在servlet.xml文件com.student.dto中,它是实际的包名,并在Contacts实体上添加了@Component。有没有办法自动在所有hibernate类上添加@Component。每次创建一个模型时,我都会这样做,我觉得应该有更好的方法来完成这项工作 <context:component-scan base-package="com.student.dto" /> @Com

我在程序中休眠了带注释的类。因为我正在运行一个Spring项目,所以我已经将它们包含在servlet.xml文件com.student.dto中,它是实际的包名,并在Contacts实体上添加了@Component。有没有办法自动在所有hibernate类上添加@Component。每次创建一个模型时,我都会这样做,我觉得应该有更好的方法来完成这项工作

<context:component-scan base-package="com.student.dto" />




@Component
@Entity
@Table(name = "Contacts", catalog = "javadb")
public class ContactsDTO implements java.io.Serializable {

    private int idContacts;
    private StudentDTO StudentDTO;
    private String addr1;
    private String addr2;
    private String city;
    private String state;
    private String pinCode;
    private String country;
    private String phone;
    private String mobile;
    private String email;
    private String contactscol;

    public ContactsDTO() {
    }

    public ContactsDTO(int idContacts) {
        this.idContacts = idContacts;
    }

    public ContactsDTO(int idContacts, StudentDTO StudentDTO, String addr1,
            String addr2, String city, String state, String pinCode,
            String country, String phone, String mobile, String email,
            String contactscol) {
        this.idContacts = idContacts;
        this.StudentDTO = StudentDTO;
        this.addr1 = addr1;
        this.addr2 = addr2;
        this.city = city;
        this.state = state;
        this.pinCode = pinCode;
        this.country = country;
        this.phone = phone;
        this.mobile = mobile;
        this.email = email;
        this.contactscol = contactscol;
    }


   getters & setters

您可以按约定对此进行配置。在servlet.xml中,您可以添加一个执行类路径扫描的bean,并可以使用正则表达式和通用命名方法自动添加@组件。详情请参见此处:


你完全做错了。SpringBean在默认情况下是单例的,您的实体不是线程安全的,它们也不应该是线程安全的

实体应该是绑定到持久上下文的局部变量。它们不应在多线程环境中访问

并发控制非常重要,您的应用程序逻辑应该主要关注

您的DAO和服务应该是Spring单例组件。您的实体和请求绑定DTO永远不应该是单例的。这些对象是短期的,作用域为生成它们的请求


检查文档是否有可靠的数据访问层设计。

组件javadocs说明了这一点

指示带注释的类是组件。当使用基于注释的配置和类路径扫描时,此类类被视为自动检测的候选类

@Component、@Repository等通常用于应用程序启动期间的自动扫描以及依赖项注入。我认为将实体作为Spring组件没有任何意义。实体的典型用途是表示关系数据库表。实体Java=表RDBMS。下面是实体的定义

实体是轻量级持久性域对象。通常,一个实体表示关系数据库中的一个表,每个实体实例对应于该表中的一行。实体的主要编程工件是实体类,尽管实体可以使用帮助器类

包含实体的方式应如下所示:

    <bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
            <property name="dataSource" ref="dataSource"/>
            <property name="hibernateProperties">
                <props>
                    <prop key="hibernate.dialect">${hibernate.dialect}</prop>
                    <prop key="hibernate.show_sql">${hibernate.show_sql}</prop>
                    <prop key="hibernate.format_sql">${hibernate.format_sql}</prop>
                    <prop key="hibernate.jdbc.batch_size">${hibernate.jdbc.batch_size}</prop>
                </props>
            </property>

            <property name="annotatedClasses">
    <list>
<!-- Here are your Entities annotated with @Entity -->
    </list>
    </bean>
请注意,还可以定义名为annotatedPackages的属性并定义包 就我个人而言,我还没有测试过带注释的包。但是,注释类工作得非常好。
正如@Vlad Mihalcea所建议的,实体并不意味着是单体的。它们更多地属于本地范围,并且每个请求都要初始化。

whow,model=DTO=springbean。说真的..energizer:这个模型不会被DTO使用,但是你能建议如何在不被声明为@component的情况下初始化这个模型类吗…我想他的意思是,一般来说,我不认为实体是用comportment注释的。从我所读到的内容来看,通常会出现某种业务服务,SpringBean也不是线程安全的。如果是这样,我如何确保我的DAO和服务是线程安全的。Springbean不应该有可变状态。所有状态都是在初始化时生成的。可变状态封装在请求/响应数据中。