JPA 本机查询。不能 select 特定列
JPA Native Query. Cannot select specific columns
我正在开发一个 Spring 启动项目,使用 JPA 连接到我的数据库。我想对 select 某些特定字段进行本机查询,但它不允许我这样做。例如,我只想获取客户的 id、firstName、lastName 和 phoneNumber 但它会抛出错误,如
The column name current_access_token was not found in this ResultSet.
这是我在 JPA 存储库中的查询代码,
@Query(value = "SELECT c.id, c.phone_number, c.firstname, c.lastname FROM tbl_customers c JOIN tbl_subscriptions s ON c.id = s.customer_id WHERE s.role = 'member' AND s.deleted_at IS NULL", nativeQuery = true)
List<Customer> findMemberByRole(String role);
这是我的 Cutomer.java
@Getter
@Setter
@Accessors(chain=true)
@NoArgsConstructor
@AllArgsConstructor
@ToString
@Entity
@Table(name = "tbl_customers")
public class Customer implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(unique = true)
private Long id;
@Column(nullable = false, name = "phone_number")
private String phoneNumber;
private String firstname;
private String lastname;
@Column(name = "current_access_token")
private String currentAccessToken;
@Column(name = "consent_accepted")
private Boolean consentAccepted;
...
...
}
如何避免或忽略不需要的列?非常感谢您的帮助。
如果你真的想return只有来自客户table的4列,那么你想在这里使用的签名是List<Object[]>
:
@Query(value = "SELECT c.id, c.phone_number, c.firstname, c.lastname FROM tbl_customers c JOIN tbl_subscriptions s ON c.id = s.customer_id WHERE s.role = 'member' AND s.deleted_at IS NULL", nativeQuery = true)
List<Object[]> findMemberByRole(String role);
然后,当访问你的结果集时,你会使用类似的东西:
List<Object[]> resultSet = findMemberByRole("admin");
for (Object[] rs : resultSet) {
Long id = (Long) rs[0];
String phoneNumber = (String) rs[1];
String firstName = (String) rs[2];
String lastName = (String) rs[3];
}
我正在开发一个 Spring 启动项目,使用 JPA 连接到我的数据库。我想对 select 某些特定字段进行本机查询,但它不允许我这样做。例如,我只想获取客户的 id、firstName、lastName 和 phoneNumber 但它会抛出错误,如
The column name current_access_token was not found in this ResultSet.
这是我在 JPA 存储库中的查询代码,
@Query(value = "SELECT c.id, c.phone_number, c.firstname, c.lastname FROM tbl_customers c JOIN tbl_subscriptions s ON c.id = s.customer_id WHERE s.role = 'member' AND s.deleted_at IS NULL", nativeQuery = true)
List<Customer> findMemberByRole(String role);
这是我的 Cutomer.java
@Getter
@Setter
@Accessors(chain=true)
@NoArgsConstructor
@AllArgsConstructor
@ToString
@Entity
@Table(name = "tbl_customers")
public class Customer implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(unique = true)
private Long id;
@Column(nullable = false, name = "phone_number")
private String phoneNumber;
private String firstname;
private String lastname;
@Column(name = "current_access_token")
private String currentAccessToken;
@Column(name = "consent_accepted")
private Boolean consentAccepted;
...
...
}
如何避免或忽略不需要的列?非常感谢您的帮助。
如果你真的想return只有来自客户table的4列,那么你想在这里使用的签名是List<Object[]>
:
@Query(value = "SELECT c.id, c.phone_number, c.firstname, c.lastname FROM tbl_customers c JOIN tbl_subscriptions s ON c.id = s.customer_id WHERE s.role = 'member' AND s.deleted_at IS NULL", nativeQuery = true)
List<Object[]> findMemberByRole(String role);
然后,当访问你的结果集时,你会使用类似的东西:
List<Object[]> resultSet = findMemberByRole("admin");
for (Object[] rs : resultSet) {
Long id = (Long) rs[0];
String phoneNumber = (String) rs[1];
String firstName = (String) rs[2];
String lastName = (String) rs[3];
}