我正在开发一个人力资源管理应用程序,所以我对如何通过JPA管理实体感到困惑。
我的情况是一组多语言上下文中的表:-employees-departments-languages-departments_languages
在我的数据库表之后:
@Entity
@Table(name="employees")
@NamedQuery(name="Employee.findAll", query="SELECT e FROM Employee e")
public class Employee implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name="employeed_id", unique=true, nullable=false)
private int employeedId;
@Column(nullable=false, length=255)
private String address;
@Temporal(TemporalType.DATE)
@Column(nullable=false)
private Date birthday;
...
//bi-directional many-to-one association to Department
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="department_id", nullable=false)
private Department department
}
@Entity
@Table(name="departments")
@NamedQuery(name="Department.findAll", query="SELECT d FROM Department d")
public class Department implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name="department_id", unique=true, nullable=false)
private int departmentId;
@Temporal(TemporalType.TIMESTAMP)
@Column(name="date_added", nullable=false)
private Date dateAdded;
@Column(name="location_id", nullable=false)
private int locationId;
@Column(nullable=false)
private byte status;
//bi-directional many-to-one association to DepartmentsLanguage
@OneToMany(mappedBy="department")
private Set<DepartmentsLanguage> departmentsLanguages;
//bi-directional many-to-one association to Employee
@OneToMany(mappedBy="department",fetch=FetchType.LAZY)
private Set<Employee> employees;
...
}
@Entity
@Table(name="departments_languages")
@NamedQuery(name="DepartmentsLanguage.findAll", query="SELECT d FROM DepartmentsLanguage d")
public class DepartmentsLanguage implements Serializable {
private static final long serialVersionUID = 1L;
@EmbeddedId
private DepartmentsLanguagePK id;
@Column(length=255)
private String description;
@Column(length=255)
private String name;
//bi-directional many-to-one association to Department
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="department_id", nullable=false, insertable=false, updatable=false)
private Department department;
//bi-directional many-to-one association to Language
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="language_id", nullable=false, insertable=false, updatable=false)
private Language language;
...
}
SELECT * FROM employees
INNER JOIN departments_languages using(department_id)
WHERE employeed_id = 1 and language_id = 1
从这个查询中,我需要员工信息,以及部门名称(假设languageId为1)
从eclipse JPA控制台执行查询将返回一个Employee对象,该对象具有所有关系,但结果都是相关的
你能给我看一个这种设计的样本查询吗
解决了使用fetch join实现查询的问题,例如:
Query query = entityManager.createQuery("select e from Employee as e "
+ "JOIN FETCH e.department d "
+ "JOIN FETCH d.departmentsLanguages dl "
+ "where e.employeedId = :employeeId "
+ "and dl.language = :languageId");
此外,您还可以使用EntiyGraph特性以一种出色的JPA风格来提高性能;)
当使用jpa本机查询 事务传播是我们正在使用的正确jpa的唯一特性吗? 在我的意见中,我就像使用普通的旧jdbc pluc jpa事务传播 我正在阅读PRO JPA一书,根据我的理解 当我们使用JPA本机查询获取一组标量值时(与我们使用jdbc的方式很相似),实际上没有托管实体和持久性上下文的概念。当我们通过本机查询检索实体时,情况会发生变化。
我对Spring和冬眠是新的。我有一个使用Spring、Hibernate和PostgreSQL的项目。我知道我可以使用Spring Data JPA或Hibernate查询数据库,但我不知道每种方法的优点和缺点是什么。我还知道在后台,Spring Data JPA会调用Hibernate。那么我应该使用什么最佳方式来查询数据库以获得最佳性能,Spring数据JPA或Hibernate或取决于具体
我是JPA新手,现在学习如何通过关系连接两个表。我得到的实体来自数据库。我有两张桌子,分别是Department和Employee。许多员工属于一个部门。 部门 雇员 多对一 错误
我正在使用Spring Data JPA(使用Hibernate作为我的JPA提供程序),并希望定义一个方法,附带一个HQL查询: HQL查询的外观如何才能使其正常工作?我知道,如果,我可以简单地返回一个长值,然后在我的Java代码中检查,但是这种变通方法不应该是必要的,对吗?
我使用的是spring boot版本2.0.3.Release和spring data jpa版本2.0.8.Release。我有两个表TableA、TableB,它们是一对一映射的。
我有两个类具有单向的单人关系: 当我救了这些类,一切都很好。现在,我想基于现有的a检索另一个。我创建了一个CriteriaQuery,它基本上是“Select*FROM OTHERE WHERE a=:a”。但是当我将A类型的对象设置到查询中时,它将失败。查看数据库,我可以看到另一个.a字段实际上是一个varchar,其值为“typeA:123”(其中123是a对象的ID)。不幸的是,我不能在这里