hibernate Spring save指令无法保存 30C

使用了save指令 但是控制台没有输出insert语句 也没有报错 没有保存数据

public class Payroll{



    @Id
    @GeneratedValue
    private long pid;

    private long sid;
    //结账日期
    private Timestamp date;
    //累结
    private double totalSum;
    //结余
    private double balance;
    //伙食费用
    private double boardWages;
    //扣款
    private double deduct;
    //欠款
    private double debt;
    ///预支
     private double advance;
    //薪水细则
     @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)  
     @JoinColumn(name="pid")
    private List<PayrollRow> payrollRow = new ArrayList<PayrollRow>();
    //省略GETTER SETTER
    }

 @Entity
public class PayrollRow {



    @Id
    @GeneratedValue
    private long prid;
    private String style_number;
    private String process;
    private int count;
    private double cost;
    private double amount;
    //
    }

DAO层

 @Repository
public class PayrollDAOImpl implements PayrollDAO{

    @Autowired SessionFactory sessionFactory;
    public boolean save(Payroll p) {
        // TODO Auto-generated method stub
        try {
            System.out.println("info"+sessionFactory.getCurrentSession().save(p));

        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
            return false;
        }

        return true;
    }


    public boolean saveRow(PayrollRow pr){
        // TODO Auto-generated method stub
        try {
            System.out.println("info"+sessionFactory.getCurrentSession().save(pr));

        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
            return false;
        }

        return true;
    }


}

service层

 @Service
@Transactional
public class PayrollServiceImpl implements PayrollService {

    @Autowired
    PayrollDAOImpl payrollDAO ;

    public boolean save(Payroll payroll){
        List<PayrollRow> pwl = payroll.getPayrollRow();
        for (int i = 0;i<pwl.size();i++) {
            payrollDAO.saveRow(pwl.get(i));
            System.out.println("info "+i);
        }
        return payrollDAO.save(payroll);
    }


}

配置文件

  <!-- 支持注解 -->
    <mvc:annotation-driven />

    <!--自动装配DefaultAnnotationHandlerMapping和AnnotationMethodHandlerAdapter -->
    <mvc:default-servlet-handler />


    <!-- 设置自动扫描的路径,用于自动注入bean   这里的路径与自己的项目目录对应--> 
    <!-- 扫描controller路由控制器  -->  
    <context:component-scan base-package="pres.uiiooo.controller" />  
    <context:component-scan base-package="pres.uiiooo.daoimpl,pres.uiiooo.serviceimpl" />  



    <!-- 视图解析器 -->
        <bean id="viewResolver"  
        class="org.springframework.web.servlet.view.InternalResourceViewResolver">  
        <property name="viewClass"
            value="org.springframework.web.servlet.view.JstlView" />
        <property name="suffix" value=".jsp" />            <!-- 视图文件类型 -->
        <property name="prefix" value="/WEB-INF/views/" />  <!-- 视图文件的文件夹路径 -->
    </bean>
    </beans>

     <!-- JNDI(通过Tomcat)方式配置数据源 -->  
    <!-- <bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean"> <property name="jndiName" value="${jndiName}"></property> </bean> -->  


       <!-- 引入属性文件 -->  
    <context:property-placeholder location="classpath:config.properties" />  


    <!-- 配置数据源  这里class可以使用不同的驱动-->  
    <bean name="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">  
     <property name="driverClassName" value="${jdbc_driverClassName}" />  
        <property name="url" value="${jdbc_url}" />  
        <property name="username" value="${jdbc_username}" />  
        <property name="password" value="${jdbc_password}" />
    </bean>  


    <!-- 配置hibernate session工厂 -->  
    <bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">  

        <property name="dataSource" ref="dataSource" />  
        <property name="hibernateProperties">  
            <props>  
                <prop key="hibernate.hbm2ddl.auto">${hibernate.hbm2ddl.auto}</prop>  
                <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="current_session_context_class">thread</prop>    
            </props>  
        </property>  

        <!-- 自动扫描注解方式配置的hibernate类文件 -->  
        <property name="packagesToScan">  
            <list>  
             <!-- 此处与entity实体路径对应 -->  
                <value>pres.uiiooo.model</value>  
            </list>  
        </property>  
    </bean>  



    <!-- 配置事务管理器 -->  
    <bean name="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">  
        <property name="sessionFactory" ref="sessionFactory"></property>  
    </bean>    


    <!-- 注解方式配置事物 -->  
    <tx:annotation-driven  transaction-manager="transactionManager" />   



</beans>  

其他的DAO层save是可用的 但是这个不行 应该是涉及到事务管理配置 还有一对多配置方面的问题 求大佬解决 谢谢谢谢了!!!

1个回答

一对多关系写错了,首先Payroll这个是一方,没有targetEntity 和mapedby配置。另外也不需要写@joinColumn
PayrollRow 没配置@ManyToOne,还要在此表维护关系。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问