【发布时间】:2017-03-26 09:13:04
【问题描述】:
我似乎无法向我的表中添加值。没有错误,但值没有插入我的数据库中。提交表单后,不会出现任何错误。
在查看控制台时,会显示:
Hibernate:
insert
into
referral
(address, doctor_contact_no, doctor_name, facility_contact_no, facility_type, referral_no, referring_from, referring_to)
values
(?, ?, ?, ?, ?, ?, ?, ?)
我已经尝试过记录,以防我的控制器无法读取我提交的表单。
我正在保存的实体/模型的代码片段
@Entity
@Table(name="referral")
public class Referrals {
@Id
@Column
@GeneratedValue(strategy=GenerationType.AUTO)
private Integer id;
@Column
private String referral_no;
@Column
private String facility_contact_no;
@Column
private String referring_from;
@Column
private String referring_to;
@Column
private String facility_type;
@Column
private String address;
@Column
private String doctor_name;
@Column
private String doctor_contact_no;'
我的服务类的代码片段
@Service
@Transactional
public class ReferralServicesImpl implements ReferralServices{
@Autowired
private ReferralDao referralDao;
public List<Referrals> list(){
return referralDao.list();
}
public boolean saveReferral(Referrals referral){
if(referralDao.saveReferral(referral))
return true;
else
return false;
}
}
控制器方法的代码片段
@RequestMapping(value = "/teleaudiology/referral", method = RequestMethod.GET)
public ModelAndView showForm() {
return new ModelAndView("referrals", "referrals", new Referrals());
}
@RequestMapping(value = "/teleaudiology/referrals", method = RequestMethod.POST)
public String submit(@Valid @ModelAttribute("referrals")Referrals referral,
BindingResult result, ModelMap model) {
if (result.hasErrors()) {
return "error";
}
System.out.println("referral: "+referral.getDoctor_name());
if(referralServices.saveReferral(referral))
return "redirect:../teleaudiology";
else
return "redirect:../teleaudiology";
}
这里是 ReferralDao 类
public interface ReferralDao {
public boolean saveReferral(Referrals referral);
public List<Referrals> list();
}
ReferralDao 实现
@Repository
@Transactional
public class ReferralDaoImpl implements ReferralDao {
@Autowired
SessionFactory session;
Transaction trans;
public boolean saveReferral(Referrals referral) {
// TODO Auto-generated method stub
//System.out.println("Saving..."+referral.getReferring_to_address());
trans=session.getCurrentSession().beginTransaction();
session.getCurrentSession().saveOrUpdate(referral);
return true;
}
public List<Referrals> list() {
// TODO Auto-generated method stub
return session.getCurrentSession().createQuery("from Referrals").list();
}
}
我尝试过使用
trans=session.getCurrentSession().getTransaction();
但是导致了这个错误
`saveOrUpdate is not valid without active transaction`
来自 servlet-context.xml 的片段
<tx:annotation-driven transaction-manager="transactionManager" />
<beans:bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
<beans:property name="sessionFactory" ref="sessionFactory" />
</beans:bean>
【问题讨论】:
-
你能分享你的 ReferralDao 课程吗?
-
hi @shubham 添加了 ReferrDao 类
-
不要调用 beginTransaction()。您的方法是事务性的,Spring 为您处理事务。此外,请尊重 Java 命名约定,不要将复数形式用于应该是单数的东西(Referrals、ReferralServices)。最后,您的 DAO saveReferral 方法应该返回 void。这个布尔永远为真的返回值是无用且令人困惑的。
-
那么,我应该只有“trans = session.getCurrentSession();”吗? @JBNizet
-
我尝试使用
trans=session.getCurrentSession().getTransaction();,但导致了这个错误saveOrUpdate is not valid without active transaction@JBNizet
标签: java spring hibernate database-management