坚持使用AngularJS和JPA

时间:2014-07-02 20:37:22

标签: json angularjs jpa persistence

我正在尝试使用Google Guice,JPA(EclipseLink)和AngularJS开发应用程序。 基本上在这个应用程序中,我有一些员工和每个人的多个薪水。

public class Employee implements Serializable {

@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name="ID_EMPLOYEE")
private long idEmployee;

@OneToMany(cascade = CascadeType.ALL, mappedBy = "employee",targetEntity = Salary.class,fetch = FetchType.EAGER)
private List<Salary> salaries;

和Salary对象:

public class Salary implements Serializable {
private static final long serialVersionUID = 1L;

@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name="ID_SALARY")
private long idSalary;

@Column(name="SALARY_PA")
private String salaryPa;

@ManyToOne
@JoinColumn(name="ID_EMPLOYEE", referencedColumnName = "ID_EMPLOYEE")
private Employee employee;

现在,我可以使用angularJS和REST服务插入新员工,没有任何问题。我不能做的是为现有员工增加新薪水。 基本上我在angularJS控制器中的含义是:

$scope.employee.salaries.push(this.salaryToAdd);
employeeServ.persistSalary(employee);

然后我只保存员工。薪水得到了保存,但是当我试图找到员工时,有时我可以看到工资。我注意到的是工资没有任何对员工的引用,所以也许当我得到员工时,JPA不知道薪水是否与该员工有关。

这是我的道具和与持久性相关的部分:

public abstract class GenericDao<E> implements AbstractDao<E> {

@Inject
private EntityManager em;

protected abstract Class<E> getGenericClass();

@Transactional
@Override
public void insert(E entity) {
    em.persist(entity);
}

@Transactional
@Override
public void update(E entity) {
    em.merge(entity);
}

@Transactional
@Override
public void delete(E entity) {
    em.remove(entity);
}

public E findById(Long id) {
    Class<E> clazz = getGenericClass();
    return em.find(clazz, id);
}

public List<E> findAll() {
    Class<E> clazz = getGenericClass();
    CriteriaQuery<E> query = em.getCriteriaBuilder().createQuery(clazz);
    Root<E> root = query.from(clazz);
    query.select(root);
    return em.createQuery(query).getResultList();
}

public EntityManager getEntityManager() {
    return em;
}



@Path("/employee")

公共类EmployeeProvider {

@Inject
EmployeeDao dao;

@GET
@Produces(MediaType.APPLICATION_JSON)
@Path("/get/{id}")
public String get(@PathParam("id") String id) {
    final Gson gson = new GsonBuilder().setPrettyPrinting().create();
    if("all".equals(id)) {
        return gson.toJson(dao.findAll().toArray());
    } else {
        return gson.toJson(dao.findById(Long.valueOf(id)));
    }
}

@POST
@Path("/post")
public void post(String employee) {
    final Gson gson = new GsonBuilder().setPrettyPrinting().create();
    Employee entity = gson.fromJson(employee, Employee.class);
    dao.update(entity);
}

0 个答案:

没有答案