我是新來的JPA和我在與從存儲庫此示例代碼的一個問題:JPA如何調用合併或持續
@Override
public boolean add(User user) {
EntityManagerFactory emf = HibernateRepositoryFactory
.getEntityManagerFactory();
EntityManager em = emf.createEntityManager();
EntityTransaction tx = em.getTransaction();
tx.begin();
User tempUser = null;
try {
if (user.getId() != null) {
tempUser = em.find(User.class, user.getId());
}
if (tempUser == null) {
em.persist(user);
} else {
// if so, get the differences and persist them
tempUser.setPassword(user.getPassword());
tempUser.setUserName(user.getUserName());
tempUser = em.merge(user);
}
} catch (Exception e) {
logging.error("log error+ " :" + e);
}
tx.commit();
em.close();
emf.close();
return true;
}
與實體:
@Entity
@Table(name = "USERS")
public class User implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "ID", nullable = false, unique = true)
private Long id;
@Version
@Column(name = "OPTLOCK")
private int version;
@Column(name = "USERNAME", nullable = false)
private String userName;
@Column(name = "PASSWORD", nullable = false)
private String password;
public User() {
super();
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public Long getId() {
return id;
}
public int getVersion() {
return version;
}
}
我完全不理解它。
在行:if(user.getId()!= NULL)user.getId永遠是零,因爲我相信,ID將此刻的對象將被持久化生成?像這樣tempUser將永遠不會從數據庫中填充,並且對象將始終保持不被合併....或者我看到這個錯誤?
什麼會看到,如果你需要保留或合併這樣的最佳方式。
編輯
,如果我會用什麼主這樣的:
User user1 = new User();
user1 .setPassword("password_user1");
user1 .setUserName("userName_user1");
... .add(user1);
如果我跑這一次的用戶加入。如果我然後再次運行此用戶再次堅持一個ID + 1
如果Id是已修改的分離實體,則Id可能不爲null。 – SJuan76 2013-02-22 13:42:11
@ Sjuan76就我所見,我沒有看到分離。如果我使用這個方法添加一個User對象並且我運行了兩次,那麼2個用戶將在我的數據庫中,而不是一個...。 – 2013-02-22 13:48:16
您只會顯示一小部分程序。該邏輯使用代碼更新現有實體或保留新實體。前者最好通過檢索實體並將其分離來完成(因此,您不需要等待UI過多時間)。 – SJuan76 2013-02-22 14:03:34