ssh-SSH整合,hibernate注解配置,无hbm.xml,映射出现问题

问题描述

SSH整合,hibernate注解配置,无hbm.xml,映射出现问题

java实体类代码:

 package cn.com.car.base.entity;

import java.io.Serializable;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;

import org.hibernate.annotations.GenericGenerator;

@Entity
@Table(name="T_CAR")
public class Car implements Serializable{
    private static final long serialVersionUID = 1L;

    @GenericGenerator(name = "generator", strategy = "guid")
    @Id
    @GeneratedValue(generator = "generator")
    @Column(name = "id", unique = true, nullable = false, length = 38)
    private String id;

    @Column(name="models")
    private String models;//具体车型

    @Column(name="type")
    private String type;//所属类别

    @Column(name="price")
    private int price;//价格

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getModels() {
        return models;
    }

    public void setModels(String models) {
        this.models = models;
    }

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }

    public int getPrice() {
        return price;
    }

    public void setPrice(int price) {
        this.price = price;
    }

    @Override
    public String toString() {
        return "Car [id=" + id + ", models=" + models + ", type=" + type
                + ", price=" + price + "]";
    }

}


application.xml配置

 <?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
           http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
           http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd"
       default-autowire="byName" default-lazy-init="true">

    <!-- 属性文件读入 -->
    <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="locations">
            <list>
                <value>classpath*:hibernate.properties</value>
            </list>
        </property>
    </bean>

    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
        <property name="driverClassName" value="${hibernate.connection.driverClassName}"/>
        <property name="url" value="${hibernate.connection.url}"/>
        <property name="username" value="${hibernate.connection.username}"/>
        <property name="password" value="${hibernate.connection.password}"/>
    </bean>

    <!--Hibernate SessionFatory-->
    <bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <property name="annotatedClasses">
            <list>
                <value>cn.com.car.base.entity.Car</value>
            </list>
        </property>
        <property name="hibernateProperties">
            <value>classpath:hibernate.properties</value>
        </property>
    </bean>

    <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory"/>
    </bean>

</beans>

hibernate.properties配置文件

 hibernate.show_sql=true
hibernate.format_sql=false
hibernate.cache=org.hibernate.cache.EhCacheProvider
hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
hibernate.connection.driverClassName=com.mysql.jdbc.Driver

hibernate.connection.url=jdbc:mysql://localhost:3306/car

hibernate.connection.username=car
hibernate.connection.password=123456

hibernate.c3p0.minPoolSize=5
hibernate.c3p0.maxPoolSize=50
hibernate.c3p0.timeout=1800
hibernate.c3p0.max_statement=200

DAO层

 package cn.com.car.base.dao.impl;

import java.util.HashMap;
import java.util.List;

import org.hibernate.Query;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

import cn.com.car.base.dao.CarDao;
import cn.com.car.base.entity.Car;

public class CarDaoImpl extends HibernateDaoSupport implements CarDao {

    @Override
    public List<Car> getAllCar() {
        String sql="from T_CAR where 1=1";
        List<Car> list=this.getHibernateTemplate().find(sql);
        return list;
    }

    @Override
    public List<Car> getCarByParam(HashMap<String, String> param) {
        StringBuilder sql=new StringBuilder();
        sql.append("select * from T_CAR where 1=1");
        if(param!=null){
            if(param.get("type")!=null){
                String type=param.get("type");
                sql.append("and type="+type);
            }
            if(param.get("price")!=null){
                String price=param.get("price");
                sql.append("and price="+price);
            }

            Query query = this.getSession().createSQLQuery(sql.toString());
            List<Car> list=query.list();
            return list;
        }
        List<Car> list=this.getHibernateTemplate().find(sql.toString());
        return list;
    }

    @Override
    public Car getCarByModels(String models) {
        String hql = "from T_CAR t where 1=1 "
                  +" and t.models=? ";
            Query query = this.getSession().createQuery(hql).setString(0, models);
            return (Car) query.list().get(0);
    }

    @Override
    public Car getCarById(String id) {
        String hql = "from T_CAR t where 1=1 "
                  +" and t.id=? ";
            Query query = this.getSession().createQuery(hql).setString(0, id);
            return (Car) query.list().get(0);
    }

}

我是模仿别的项目搭建的,没有.hbm.xml,现在运行DAO层就出现
“org.hibernate.hql.ast.QuerySyntaxException: T_CAR is not mapped [from T_CAR where 1=1]”这样的错误。

解决方案

很明显,你的这两句HQL语句有问题

 @Override
    public Car getCarByModels(String models) {
        String hql = "from T_CAR t where 1=1 "
                  +" and t.models=? ";
            Query query = this.getSession().createQuery(hql).setString(0, models);
            return (Car) query.list().get(0);
    }

    @Override
    public Car getCarById(String id) {
        String hql = "from T_CAR t where 1=1 "
                  +" and t.id=? ";
            Query query = this.getSession().createQuery(hql).setString(0, id);
            return (Car) query.list().get(0);
    }

既然你创建的是createQuery 那么必须使用hql语法,因此

 String hql = "from T_CAR t where 1=1 "

这个语句中的 from后面应该跟的是对象,也就是表 T_CAR对应的实体 Car 。 HQL语句中所有的属性对应的不是表字段,而是表对应实体的属性,
因此 改成

 String hql = "from Car t where 1=1 "

就行了。下面这段代码不会报错

  @Override
    public List<Car> getCarByParam(HashMap<String, String> param) {
        StringBuilder sql=new StringBuilder();
        sql.append("select * from T_CAR where 1=1");
        if(param!=null){
            if(param.get("type")!=null){
                String type=param.get("type");
                sql.append("and type="+type);
            }
            if(param.get("price")!=null){
                String price=param.get("price");
                sql.append("and price="+price);
            }

            Query query = this.getSession().createSQLQuery(sql.toString());
            List<Car> list=query.list();
            return list;
        }
        List<Car> list=this.getHibernateTemplate().find(sql.toString());
        return list;
    }

是因为使用了createSQLQuery所以运行的是原生SQL,

解决方案二:

hibernate.hbm.xml配置
hibernate.hbm.xml配置
hibernate 的hbm.xml配置

解决方案三:

语句有问题,你的T_CAR 改成你自己的表名

解决方案四:

用SSH一般很少用到SQL,大多都是HQL

时间: 2024-10-01 05:42:33

ssh-SSH整合,hibernate注解配置,无hbm.xml,映射出现问题的相关文章

Hibernate Annotations实战--从hbm.xml到Annotations

从 hbm.xml 到 Annotations 下面让我们先看一个通常用 hbm.xml 映射文件的例子. 有3个类 .HibernateUtil.java 也就是 Hibernate文档中推荐的工具类,Person.java, Test.java 测试用的类.都在test.hibernate 包中. 每个类的代码如下: HibernateUtil: 01 package test.hibernate; 02 03 import org.hibernate.HibernateException;

测试hibernate报错:无法加载hbm.xml映射文件

问题描述 测试hibernate报错:无法加载hbm.xml映射文件 hibernate配置文件里,也是加载了此映射文件的哦 解决方案 解决办法---------映射文件User.hbm.xml中,class标签的name属性要上全限定类名:class name="com.cailikun.domain.User" 解决方案二: http://xiaoyaocao.iteye.com/blog/1837133

Hibernate -- 注解(Annotation)关系映射

转自:http://www.cnblogs.com/tyler2000/archive/2011/01/20/1940354.html 1. Hibernate Annotation关系映射有下面几种类型:1)一对一外键关联映射(单向) 2)一对一外键关联映射(双向) 3)一对一主键关联映射(不重要)在这不演示 在实际中很少用,使用注解@PrimaryKeyJoinColumn 意思是说,我的主键去参考另外一张表中的主键,作为我的主键,但是在我测试使用 注解一对一主键关联映射,在生成表的时候,数

hibernate注解配置关联关系

1.在判断到底是谁维护关联关系时,可以通过查看外键,哪个实体类定义了外键,哪个类就负责维护关联关系. JoinColumn(name="pid") 2. 在保存数据时,总是先保存的是没有维护关联关系的那一方的数据,后保存维护了关联关系的那一方的数据,如:             Person p = new Person();             p.setName("xiaoluo");             session.save(p);        

hibernate5(4)实体映射注解配置[1]注解全面解析

相对于经典风格的实体配置xxx.hbm.xml,新版本hibernate使用JPA(Java Persistence API)注解配置能使我们的开发更加敏捷便利.在本系列前面部分的文章中,我们围绕JPA注解风格配置来逐步深入学习. 配置实例 下面先看一个实体类的配置实例: package com.zeng.model; import java.util.Date; import javax.persistence.Basic; import javax.persistence.Column; i

【maven + hibernate(注解) +spring +springMVC】 使用maven搭建项目

研究,百度,查资料+好友帮助,使用MyEcplise2015工具,通过maven搭建hibernate+springMVC+spring的项目,数据库采用MySql5.5 不过使用的版本会在项目搭建过程中介绍. 大概就是下面的几个步骤: 1. 设计数据库,得到数据库 2.使用maven搭建项目,导入包的依赖 3.引入spring的配置信息,放在资源文件中 4.引入Log4j日志文件配置 5.配置hibernate 6.配置ehcache.xml 7.使用hibernate  tools生成实体

Java的Hibernate框架中复合主键映射的创建和使用教程_java

复合主键映射需要在映射配置文件中使用<composite-id>标签,该标签是指将一个类指定为相应的复合主键,它的name属性需要指定类文件中定义的属性值,并在该标签中添加<key-property>子标签. Note:想要使用复合映射必须要将复合主键放到一个类中,也就是讲复合主键属性和其它属性分到两个类中,并将复合主键的类实现接口Serializable,该接口隶属于java.io. 复合主键的映射关系的主键是由多个列复合而成的,对应到数据表中相当的简单,如下图: 1.类文件这里

SSH——Hibernate简单配置

         作为SSH开发框架中的ORM部分,感觉这个ORM跟以前用过的一些ORMapping框架相比,配置起来还是相对麻烦的.      一,引入Jar包                            刚开始只是引入了hibernat非常基本的jar包进去,后来debug的时候,发现缺失了很多jar包,就又引了一批进去.所以特别想问问大家引包的时候,有什么方法可以提高引入jar包的效率吗?     二,创建实体类及实体类_数据库对应xml文件          例如,表结构如下:

ssh框架中spring整合hibernate的配置文件模板(带详细注释)

applicationContext.xml的配置文件模板 1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans 3 xmlns="http://www.springframework.org/schema/beans" 4 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 5 xmlns:aop=&quo