2013-10-10 40 views
1

這是我的創建方法:入住唯一編號的創建方法(DAO)

public Person create(Person person) { 
    if (person.getId() != null) { 
     throw new IllegalArgumentException("Person already has an id."); 
    } 
    if (person == null) { 
     throw new IllegalArgumentException("Person is null."); 
    } 
    if (person.getUniqueNumber() == null) { 
     throw new IllegalArgumentException("Unique number is null."); 
    } 
    if (person.getUniqueNumber().length() == 0) { 
     throw new IllegalArgumentException("Incorrect unique number."); 
    } 
    entityManager.getTransaction().begin(); 
    entityManager.persist(person); 
    entityManager.getTransaction().commit(); 
    return person; 
} 

而這些人的屬性:

@Entity 
public class Person { 

    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Long id; 

    @Column(nullable=false, unique=true) 
    private String uniqueNumber; 
} 

如何檢查uniqueNumber是否在創建方法(如果有沒有兩個具有相同唯一編號的人)?

+0

這是使用JPA? – Raedwald

+0

是的,我正在使用JPA。 – kmaci

回答

1

您應該

  1. 必須在DB 'uniquenumber' 列的唯一約束。這是最簡單和最安全的方式。因爲它會處理併發。如果嘗試插入另一個具有相同的現有用戶的不同號碼的用戶,則會引發異常。
  2. 裏面的創建方法有另一個DAO調用來檢查是否已有一個用戶具有相同的唯一編號。可能需要設置正確的事務隔離級別才能正常工作。

我會建議去第一種方法。