2015-10-08 115 views
1

我米,春天啓動的工作,我有這兩類春數據JPA:保存實體@ManyToOne

@Entity 
@Table(name="products") 
public class Product implements Serializable { 

@Id 
@GeneratedValue(strategy=GenerationType.IDENTITY) 
private Long idProduit; 
//other attributes.. 
@ManyToOne 
@JoinColumn(name="idCategory") 
private Category category; 

和類別類:

@Entity 
public class Category implements Serializable { 
@Id 
@GeneratedValue(strategy=GenerationType.IDENTITY) 
private Long idcategory; 
//attributes... 
@OneToMany(mappedBy="category") 
private Collection<Product> products; 

我想編寫一個梅索德到保存產品

public long saveProduct(Product p, Long idCat) 

是否有在JpaRepository中定義的方法可以做到這一點,或者,我應該添加一個服務層和d efine我的方法像下面或在Repository中定義它的自定義方法?

public long saveProduct(Product p, Long idCat){ 
    Category c=getCategory(idCat); 
    p.setCategory(c); 
    em.persist(p); 
    return p.getIdProduct(); 
    } 

回答

1

我想你應該爲了處理這樣的例外添加一個服務層,並定義transactional方法CategoryNotFoundException(當Category c=getCategory(idCat)火災之一), DataIntegrityViolationException ....

構建解決方案,而一個service圖層不是一種好的做法,因爲您將不得不手動處理transactionspropagations,並且您將冒險有dirty reads