Java @组件休眠类
我在程序中休眠了带注释的类。因为我正在运行一个Spring项目,所以我已经将它们包含在servlet.xml文件com.student.dto中,它是实际的包名,并在Contacts实体上添加了@Component。有没有办法自动在所有hibernate类上添加@Component。每次创建一个模型时,我都会这样做,我觉得应该有更好的方法来完成这项工作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
<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不应该有可变状态。所有状态都是在初始化时生成的。可变状态封装在请求/响应数据中。