本帖最后由 luallen 于 2011-02-16 13:17:16 编辑

解决方案 »

  1.   

      set注入必须要有属性的get/set方法。
     你把每个类的属性都设好set/get。  而且你好象没配置 你的级联关系由谁管理:inverse="true",一般这个配置是放在一的一端。package com.entity;import java.util.HashSet;
    import java.util.Set;/**
     * SysRole entity.
     * 
     * @author MyEclipse Persistence Tools
     */public class SysRole implements java.io.Serializable { // Fields private String roleName;
    private String roleDesc;
    private Long roleFlag;
    private Set<Users> users = new HashSet<Users>();

    private Set<SysRoleRight> roleR = new HashSet<SysRoleRight>();

    // Constructors public Set<SysRoleRight> getRoleR() {
    return roleR;
    } public void setRoleR(Set<SysRoleRight> roleR) {
    this.roleR = roleR;
    } public Set<Users> getUsers() {
    return users;
    } public void setUsers(Set<Users> users) {
    this.users = users;
    } /** default constructor */
    public SysRole() {
    } /** minimal constructor */
    public SysRole(String roleName) {
    this.roleName = roleName;
    } /** full constructor */
    public SysRole(String roleName, String roleDesc, Long roleFlag) {
    this.roleName = roleName;
    this.roleDesc = roleDesc;
    this.roleFlag = roleFlag;
    } // Property accessors public String getRoleName() {
    return this.roleName;
    } public void setRoleName(String roleName) {
    this.roleName = roleName;
    } public String getRoleDesc() {
    return this.roleDesc;
    } public void setRoleDesc(String roleDesc) {
    this.roleDesc = roleDesc;
    } public Long getRoleFlag() {
    return this.roleFlag;
    } public void setRoleFlag(Long roleFlag) {
    this.roleFlag = roleFlag;
    }}package com.entity;/**
     * Users entity.
     * 
     * @author MyEclipse Persistence Tools
     */public class Users implements java.io.Serializable { // Fields private String UId;
    private String UName;
    private String UTrueName;
    private String UPassword;

    private SysRole role ;

    private Long UFlag; // Constructors /** default constructor */
    public Users() {
    } // Property accessors public String getUId() {
    return this.UId;
    } public void setUId(String UId) {
    this.UId = UId;
    } public String getUName() {
    return this.UName;
    } public void setUName(String UName) {
    this.UName = UName;
    } public String getUTrueName() {
    return this.UTrueName;
    } public void setUTrueName(String UTrueName) {
    this.UTrueName = UTrueName;
    } public String getUPassword() {
    return this.UPassword;
    } public void setUPassword(String UPassword) {
    this.UPassword = UPassword;
    } public SysRole getRole() {
    return role;
    } public void setRole(SysRole role) {
    this.role = role;
    } public Long getUFlag() {
    return this.UFlag;
    } public void setUFlag(Long UFlag) {
    this.UFlag = UFlag;
    }
    }<?xml version="1.0" encoding="utf-8"?>
    <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
    <!-- 
        Mapping file autogenerated by MyEclipse Persistence Tools
    -->
    <hibernate-mapping>
        <class name="com.entity.SysRole" table="SYS_ROLE" schema="ACCP">
            <id name="roleName" type="java.lang.String">
                <column name="ROLE_NAME" length="50" />
                <generator class="assigned" />
            </id>
            <property name="roleDesc" type="java.lang.String">
                <column name="ROLE_DESC" length="50" />
            </property>
            <property name="roleFlag" type="java.lang.Long">
                <column name="ROLE_FLAG" precision="22" scale="0" />
            </property>
            
            <!-- 配置用户和角色之间的关系 -->
            <set name="users" table="users" cascade="save-update" lazy="false" inverse="true">
             <key column="U_ROLE_NAME"></key>
             <one-to-many class="com.entity.Users"/>
            </set>
            
            <set name="roleR" table="sys_role_right" cascade="save-update" inverse="false" lazy="false">
             <key column="rf_role_name"></key>
             <one-to-many class="com.entity.SysRoleRight"/>
            </set>
        </class>
    </hibernate-mapping>
    <?xml version="1.0" encoding="utf-8"?>
    <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
    <!-- 
        Mapping file autogenerated by MyEclipse Persistence Tools
    -->
    <hibernate-mapping>
        <class name="com.entity.Users" table="USERS" schema="ACCP">
            <id name="UId" type="java.lang.String">
                <column name="U_ID" length="32" />
                <generator class="assigned" />
            </id>
            <property name="UName" type="java.lang.String">
                <column name="U_NAME" length="60" not-null="true" />
            </property>
            <property name="UTrueName" type="java.lang.String">
                <column name="U_TRUE_NAME" length="60" not-null="true" />
            </property>
            <property name="UPassword" type="java.lang.String">
                <column name="U_PASSWORD" length="60" not-null="true" />
            </property>
            
            <!-- 配置用户和角色之间的关系 -->
            <many-to-one name="role" class="com.entity.SysRole">
             <column name="U_ROLE_NAME" precision="22" scale="0" not-null="true" />
            </many-to-one>  
       
            <property name="UFlag" type="java.lang.Long">
                <column name="U_FLAG" precision="22" scale="0" />
            </property>
        </class>
    </hibernate-mapping>
      

  2.   


    set get 没有错误public List<SalesOrderProductModel> getSalesorderproducts()
    {
    return salesorderproducts;
    } public void setSalesorderproducts(List<SalesOrderProductModel> salesorderproducts)
    {
    this.salesorderproducts = salesorderproducts;
    }
    加上那个inverse="true",也白搭啊
      

  3.   

    public String update()
    {
    dao.update(salesorder);
    return SUCCESS;
    }在action里面直接执行的dao中的 update方法,dao这么写的public void update(SalesOrderModel salesorder)
    {
    Session session = HibernateSessionFactoryUtil.getSessionFactory().getCurrentSession();
    session.update(salesorder);
    }事务控制都是struts2 拦截器 自己开启及关闭
      

  4.   


    双向关联必须只明确 哪一方为维护端 哪一方为被维护端 ,只有维护段才拥有维护的权利 ,被维护端是没有权利去 更新 维护的 否则会出现错误提示信息或者无法导致 更新 ,还望搂着 查阅 hibernate 当中的
    inverse property 瞅瞅 希望对楼主有用
      

  5.   

    删除父类时、必须解除从类的关联关系,否则会报错,
    如下:1没设置级联删除时,要先删除订单详细,再删除订单
          2若设置级联删除,则可直接删除订单,此时会自动删除订单详细
          3设不设级联删除,要具体情况具体分析
    举个例: public void dellOrder(int oid){
     Transaction tx=null;
     session=this.getSession();
     Order o=(Order) session.get(Order.class, oid);//Order一个一方  try {
    tx=session.beginTransaction();
    Iterator it=o.getItems().iterator();
    while (it.hasNext())
    {
    OrderItem i=(OrderItem)it.next();//OrderItem 多的一方 session.delete(i);
    }
    session.delete(o);
    tx.commit();
    } catch (HibernateException e) {
    if(tx!=null){
    tx.rollback();
    }
    e.printStackTrace();
    }finally{
    this.closeSession();
    }
     } 
            希望对你有用、如果觉得还可惜请你给点分、谢谢!