Spring Hibernate: значения не вставляются в базу данных

Я не могу добавить значения в свою таблицу. Ошибки нет, но значения не вставляются в мою базу данных. После отправки формы никаких ошибок не появлялось.

Глядя на консоль, это показывает:

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>

person jayjay-arphie    schedule 26.03.2017    source источник
comment
Вы можете поделиться своим классом ReferralDao?   -  person shubham    schedule 26.03.2017
comment
привет @shubham добавил класс referralDao   -  person jayjay-arphie    schedule 26.03.2017
comment
Не вызывайте beginTransaction(). Ваш метод является транзакционным, и Spring обрабатывает транзакцию за вас. Кроме того, соблюдайте соглашения об именах Java и не используйте форму множественного числа для чего-то, что должно быть в единственном числе (Referrals, ReferralServices). Наконец, ваш метод saveReferral DAO должен возвращать значение void. Это логическое всегда возвращаемое значение true бесполезно и сбивает с толку.   -  person JB Nizet    schedule 26.03.2017
comment
Итак, я должен просто иметь trans = session.getCurrentSession();??? @JBNizet   -  person jayjay-arphie    schedule 26.03.2017
comment
я пытался использовать trans=session.getCurrentSession().getTransaction();, но это привело к этой ошибке saveOrUpdate is not valid without active transaction @JBNizet   -  person jayjay-arphie    schedule 26.03.2017
comment
Вам также не нужно вызывать getTransaction(). Ваши bean-компоненты аннотированы @Transactional. Итак, Spring обрабатывает транзакцию. Вам не нужно ничего делать, если ваша конфигурация транзакции верна (но вы ее не опубликовали).   -  person JB Nizet    schedule 26.03.2017
comment
Возможно, вам нужна дополнительная фиксация() для beginTransaction().   -  person utkusonmez    schedule 26.03.2017
comment
извините что нуб. я добавил кое-что о транзакции. это единственная конфигурация транзакции в проекте. @JBNizet   -  person jayjay-arphie    schedule 26.03.2017
comment
удалите аннотацию транзакции и этот session.getCurentSession.getTransaction(), и они попробуют   -  person surya    schedule 26.03.2017
comment
Можете ли вы объяснить, как это будет работать? @сурья   -  person jayjay-arphie    schedule 26.03.2017
comment
и надеюсь, что весной вы включили автоматический txn. В классе конфигурации у вас должен быть @EnableTransactionManagement . Дайте мне знать, если это работает. Я объясню   -  person surya    schedule 26.03.2017
comment
@surya я удалил его, как вы сказали, и получил сообщение об ошибке. Невозможно использовать saveOrUpdate без какой-либо транзакции. Я использовал конфигурацию xml, конфигурация есть в моем посте. Можешь взглянуть на это?   -  person jayjay-arphie    schedule 26.03.2017
comment
Здесь вы используете вложенную транзакцию. Один в сервисе а другой в дао.поэтому и попросил удалить и попробовать. Просто используйте одну транзакцию, и вы включили spring tx с аннотацией, которую я только что сказал   -  person surya    schedule 26.03.2017
comment
Я все еще новичок, поэтому, пожалуйста, помогите. У меня есть что-то вроде этого. <tx:annotation-driven transaction-manager="transactionManager" /> <beans:bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager"> <beans:property name="sessionFactory" ref="sessionFactory" /> </beans:bean>   -  person jayjay-arphie    schedule 26.03.2017
comment
@surya на основе нескольких поисков. этот фрагмент является XML-эквивалентом @EnableTransactionManagement   -  person jayjay-arphie    schedule 26.03.2017
comment
Кстати, значения все еще не вставляются в БД.   -  person jayjay-arphie    schedule 26.03.2017
comment
подключен ли он к соответствующей базе данных, дает ли какой-либо запрос на чтение какой-либо результат!   -  person surya    schedule 26.03.2017
comment
Да, это так. Я могу войти в систему.   -  person jayjay-arphie    schedule 26.03.2017


Ответы (1)


попробуйте использовать код ниже

 Session s = sessionFactory.getCurrentSession();
 s.save(object);
person Radhika    schedule 28.03.2017
comment
Хотя этот фрагмент кода может решить вопрос, включение объяснения действительно помогает улучшить качество вашего сообщения. Помните, что вы отвечаете на вопрос для будущих читателей, и эти люди могут не знать причин вашего предложения кода. - person Rosário Pereira Fernandes; 29.03.2017