gpt4 book ai didi

java - 由 SQL 连接查询映射的 JPA 实体

转载 作者:行者123 更新时间:2023-12-02 03:33:37 25 4
gpt4 key购买 nike

我想创建一个实体ReportEntry它是由 SQL 映射的。这里有两个表 - usergroup .

mysql> desc user;
+------------------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------------------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| firstName | varchar(255) | YES | | NULL | |
| lastName | varchar(255) | YES | | NULL | |
| active | bit(1) | NO | | NULL | |
| language | varchar(20) | NO | | NULL | |
| activationDate | datetime | YES | | NULL | |
| group_id | int(11) | YES | MUL | NULL | |
| |
| ...More columns... |
| |
+------------------------+--------------+------+-----+---------+----------------+

mysql> desc group;
+----------------------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------------------------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| displayName | varchar(255) | YES | MUL | NULL | |
| description | varchar(255) | YES | | NULL | |
+----------------------------+--------------+------+-----+---------+----------------+

我正在 group_id 加入这些表使用下面的 SQL 查询。

SELECT u.* FROM user u JOIN group g ON u.group_id = g.id

对于上面的查询,我想创建一个实体并使用上面的 SQL 查询作为其映射。我怎样才能实现这个目标?

我不仅想要映射,还想使用实体来查询记录。例如,假设我能够使用实体 RecordEntry 创建映射。 ,我应该能够通过像 FROM RecordEntry WHERE id = :id" and I will pass 这样的查询获取特定记录id```` 作为参数。这样,最终的查询应该以 native 形式执行,就像(对于 id=1)。

SELECT u.* FROM user u JOIN group g ON u.group_id = g.id AND id = 1

最佳答案

我建议不要将结果映射到 POJO,而是为这两个类创建实体并使用 JPA 提供的一对一注释来映射它们:

@Entity
public class User{
@Id
private long id;

@OneToOne
@JoinColumn(name="GROUP_ID")
private Group group;
...
}


@Entity
public class Group{
@Id
private long id;
...
}

更新以反射(reflect)更新的问题:然后你可以使用例如Criteria-API(或命名查询)来查询这些实体:

CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
CriteriaQuery criteriaQuery = criteriaBuilder.createQuery();
Root user = criteriaQuery.from(User.class);
criteriaQuery.where(criteriaBuilder.equal(user.get("id"), criteriaBuilder.parameter(Long.class, "id")));
Query query = entityManager.createQuery(criteriaQuery);
query.setParameter("id", id);
User result = (User)query.getSingleResult();

Source: Wikibooks on JPA

关于java - 由 SQL 连接查询映射的 JPA 实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37721028/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com