Spring Data Jpa:使用@ManyToOne保存实体

时间:2015-10-08 22:59:07

标签: spring-mvc spring-boot spring-data-jpa

我正在使用spring boot,我有这两个类

@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中定义的方法可以做到这一点,或者,如果我添加一个服务层并定义我的方法如下,或者在Repository中定义一个自定义方法?

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

1 个答案:

答案 0 :(得分:1)

我认为您应该添加服务层并定义transactional方法以处理CategoryNotFoundException之类的异常(当Category c=getCategory(idCat)触发一个时), DataIntegrityViolationException ...

构建没有service图层的解决方案不是一个好习惯,因为您必须手动处理transactionspropagations,否则您将面临dirty reads的风险。