Я совершенно не знаком с JPA + Hibernate + Spring (но у меня довольно много опыта с платформой Spring для веб-приложения и SQL), поэтому мой вопрос здесь может не использовать правильный технический термин в JPA.Сохранять значение объекта, когда оно установлено
У меня есть типичный User
POJO, который аннотируется javax.persistence.*
, и я установил hibernate + hsqldb в соответствии с приведенными мной примерами, которые в настоящее время работают нормально. User
класса выглядит следующим образом:
@Entity
@Table(name = "USER")
public class User {
private Long id;
private String name;
// Ignore id getter and setter methods
@Column(name = "USER_NAME")
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Это мой UserDAOImpl
класса.
public class UserDAOImpl implements UserDAO {
private HibernateTemplate hibernateTemplate;
public void setSessionFactory(SessionFactory sessionFactory) {
this.hibernateTemplate = new HibernateTemplate(sessionFactory);
}
@Override
public void saveUser(User user) {
hibernateTemplate.saveOrUpdate(user);
}
// This method is made to return only one User object.
@Override
@SuppressWarnings("unchecked")
public User getGiUser() {
return hibernateTemplate.find("from User where User_Name ='gi'").get(0);
}
}
Используя getGiUser
метод, я могу получить постоянный объект из базы данных (если я правильно понимаю). Мой вопрос заключается в том, можно ли сделать метод User.setName()
немедленно передать в базу данных, когда он вызывается, не сохраняя его вручную? Как и где я должен начать или узнать об этом?
Использует ли EntityManager транзакционную фиксацию? Причина, по которой я спросил, потому что я использовал openrdf-sesame со своим менеджером сущностей. Все изменения в объекте сущности немедленно сохраняются в тройном хранилище. Поэтому я задаюсь вопросом, есть ли такая же концепция в JPA. – gigadot
+1 за предложение об использовании EntityManager и об использовании HibernateTemplate не является предпочтительным методом. – gigadot
@gigadot: Да, вы можете указать транзакционные блоки с JPA 2. Это другая аннотация, хотя, IIRC. Кроме того, имейте в виду, что я лично не пробовал JPA 2 по весне, используя Hibernate в качестве поставщика непрерывности, но я бы скорее использовал это прямо сейчас, чем «устаревший» код HibernateTemplate, который у меня есть сейчас. – BobG