hibernate 能够发出sql语句,为什么数据库不能添加数据呢??

解决方案 »

  1.   

    代码是这样的
    ProductTypeDaoImpl ptdl=new ProductTypeDaoImpl();
    Session session=new Configuration().configure().buildSessionFactory().openSession();
    session.beginTransaction();

    ProductType pt=new ProductType();
    pt.setTname("烟酒");

    Product p=new Product();
    p.setNumber(10);
    p.setPname("白沙");
    p.setPprice(5.0);
    p.setProducttype(pt);

    Product p1=new Product();
    p1.setNumber(10);
    p1.setPname("精品白沙");
    p1.setPprice(10.0);
    p1.setProducttype(pt);

    pt.getProducts().add(p);
    pt.getProducts().add(p1);

    ptdl.addObject(pt);

    System.out.println("pts:"+pt.getTid());
    session.getTransaction().commit();
    session.close();
    producttype配置文件:
        <class name="com.accp.entity.ProductType" table="ProductType">
            <id name="tid" type="java.lang.Integer">
                <column name="tid" />
                <generator class="native" />
            </id>
            <property name="tname" type="java.lang.String">
                <column name="tname" length="50" not-null="true" />
            </property>
            <set name="products" cascade="all" inverse="true">
             <key column="ptid"></key>
             <one-to-many class="com.accp.entity.Product"/>
            </set>
        </class>
    product配置文件
        <class name="com.accp.entity.Product" table="Product" >
            <id name="pid" type="java.lang.Integer">
                <column name="pid" />
                <generator class="native" />
            </id>
            <property name="pname" type="java.lang.String">
                <column name="pname" length="50" not-null="true" />
            </property>
            <property name="pprice" type="java.lang.Double">
                <column name="pprice" scale="4" not-null="true" />
            </property>
            <property name="number" type="java.lang.Integer">
                <column name="number" not-null="true" />
            </property>
            <many-to-one name="producttype" class="com.accp.entity.ProductType" column="ptid"></many-to-one>
        </class>
    还请各位大侠帮助啊,谢谢
      

  2.   


    public class ProductTypeDaoImpl extends BaseDaoImpl implements ProductTypeDao {}public class BaseDaoImpl {

    //添加对象
    public void addObject(Object o){
    Session session=MyHibernateSessionFactory.openSession();
    session.saveOrUpdate(o);
    }

    //修改对象
    public void updateObject(Object o){
    Session session=MyHibernateSessionFactory.openSession();
    session.update(o);
    }

    //删除对象
    public void delObject(Object o){
    Session session=MyHibernateSessionFactory.openSession();
    session.delete(o);
    }

    //单个查询
    public Object findObjectById(Class c,int id){
    Session session=MyHibernateSessionFactory.openSession();
    Object o=session.get(c, id);
    return o;
    }

    //查询所有
    public List findObjectByAll(Class c){
    Session session=MyHibernateSessionFactory.openSession();
    List list=session.createCriteria(c).list();
    return list;
    }
      

  3.   

    你关联的ProductType 并没有先保存,故没有ProductType的id,所以无法建立关联
      

  4.   

    Hibernate: insert into ProductType (tname) values (?)
    Hibernate: insert into Product (pname, pprice, number, ptid) values (?, ?, ?, ?)
    Hibernate: insert into Product (pname, pprice, number, ptid) values (?, ?, ?, ?)
    pts:1
    pts:1
      

  5.   

    ptdl.addObject(p);
    ptdl.addObject(p1);
    试试