潘晋达 2009-07-11 09:01
浏览 177
已采纳

hibernate实体查询问题

使用实体查询时,是否一定要建立一个实体的hibernate的映射文件?
[b]问题补充:[/b]
除了加入
@Entity
@Table(name="***"),之外,还需要在配置文件中做什么配置吗,
我使用spring+hibernate,如果有对应的实体映射文件就可以查处数据来,否则就提示我 UserDefModel is not mapped

  • 写回答

4条回答 默认 最新

  • wanghaolovezlq 2009-07-11 14:04
    关注

    以前编写实体类Entity的时候,都需要配置映射文件.hbm.xml,同时需要在sessionFactory中配置映射文件或映射目录
    使用annotation时需要将sessionFactory定义为:

    【Entity】
    文件映射


    ...hbm.xml
    ....

    或者 目录映射


    classpath:/../hbm/
    ....


    现在可以使用Annotation来简化配置(jdk5 spring2.5 hibernate3.3)
    在sessionFactory中配置

    然后在Entity中定义类名的地方注释:@MappedSuperclass就可以自动完成载入,不用再配置.

    【service】
    以前编写service时要先编写Entity,Dao然后进行Dao配置进行自动注入Service
    class="com.gzpost.cps.dao.hibernate.MailDaoHibernate">




    class="com.gzpost.cps.service.impl.MailSearchServiceImpl">




    当然也可以在Spring配置中申明按名或按类自动注入,可以少配置属性,但是Bean还是要配置的

    现在可以使用SpringSide的SimpleHibernateTemplate范型Dao,直接在Service层创建,同时Service采用@Service注释来自动注册服务,在要注入参数的地方注释:@Autowired,就可以自动注入参数,前提是必须在Spring中配置


    这样就搞定了,可以减少好多的配置
    【transaction】


    在服务类定义处注释:@Transactional,还可以在具体方法出定义@Transactional(readOnly=true)//使用readOnly可以提高性能
    同一个方法里,事务可以传递,可以解决Lazy问题,可以不再使用:openSessionInView,使用此切面(aspect),必须在 实现 类(和/或类里的方法)、而不是类的任何所实现的接口上面进行注解
    例如:
    @Transactional
    public class UserManagerInCatche {
    @Transactional(readOnly=true)//使用readOnly可以提高性能
    public void initResourceCache() {
    if (!cacheInitialized) {
    synchronized (this) {
    List resources = userManager.getAllResorece();
    for (Resource resource : resources) {
    resourceDetailsInCache(resource);//resourceDetailsInCache方法会使用initResourceCache方法的事务
    }
    cacheInitialized = true;
    }
    }
    }
    private void resourceDetailsInCache(
    Resource resource) {
    // GrantedAuthority[] authorities = role2authorities(userManager.getRolesByResourceId(resource.getId()));
    GrantedAuthority[] authorities = role2authorities(resource.getRoles());

      ResourceDetails rd = new gzpost.security.resourcedetails.Resource(resource
        .getResString(), resource.getResType(), authorities);
      resourceCache.putAuthorityInCache(rd);
     }
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 一道python难题
  • ¥15 用matlab 设计一个不动点迭代法求解非线性方程组的代码
  • ¥15 牛顿斯科特系数表表示
  • ¥15 arduino 步进电机
  • ¥20 程序进入HardFault_Handler
  • ¥15 oracle集群安装出bug
  • ¥15 关于#python#的问题:自动化测试
  • ¥20 问题请教!vue项目关于Nginx配置nonce安全策略的问题
  • ¥15 教务系统账号被盗号如何追溯设备
  • ¥20 delta降尺度方法,未来数据怎么降尺度