【问题标题】:How to get Optional value using @Query如何使用@Query 获取可选值
【发布时间】:2019-07-21 09:04:05
【问题描述】:

我有一个带有一些查询的客户存储库类

@Repository
public interface CustomerRepository extends JpaRepository<Customers, Long>, JpaSpecificationExecutor<Customers> {
   @Query("select c from Customers c where c.id = ?1 and c.deleted = false")
   Optional<Customers> findCustomerById(Long id);
}    

实体类:

import com.ntric.hariom.inventory.enums.CustomerStatus;
import com.ntric.hariom.inventory.enums.CustomerType;
import com.ntric.hariom.shared.domain.AbstractEntity;
import lombok.Getter;
import lombok.Setter;

import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;

@Getter
@Setter
@Entity
public class Customers extends AbstractEntity {

private String name;

private String mobile;

private Long accountId;

private String address;

@Enumerated(EnumType.ORDINAL)
private CustomerType type;

@Enumerated(EnumType.ORDINAL)
private CustomerStatus status;

private boolean isDeleted;

private String panNumber;

private String vatNumber;

}

在运行应用程序时,我收到以下消息。

原因:org.hibernate.QueryException:无法解析属性:已删除:com.ntric.hariom.inventory.domain.Customers 在 org.hibernate.persister.entity.AbstractPropertyMapping.propertyException(AbstractPropertyMapping.java:73) 在 org.hibernate.persister.entity.AbstractPropertyMapping.toType(AbstractPropertyMapping.java:67) 在 org.hibernate.persister.entity.AbstractEntityPersister.toType(AbstractEntityPersister.java:1873) 在 org.hibernate.hql.internal.ast.tree.FromElementType.getPropertyType(FromElementType.java:393)

堆栈跟踪非常大,所以我只粘贴错误部分。

【问题讨论】:

  • 你能显示代码吗
  • 我最近编辑了这个问题
  • 这根本不是我问的。发布异常的完整和准确的堆栈跟踪,并发布客户实体的代码(实际上应该命名为客户)。还要发布存储库的完整代码,包括导入。
  • 现在错误似乎与实体类@MilanPaudyal 中的“已删除”属性有关
  • 将字段isDeleted重命名为deleted

标签: java spring-boot java-8 spring-data-jpa


【解决方案1】:

原因:org.hibernate.QueryException:无法解析属性: 已删除

这是因为该属性称为isDeleted。重命名为deleted,这部分问题就解决了。此外,可以将 getter 命名为 isDeleted,这更适合布尔值。

现在到问题的第二部分,这更像是关于改进的建议。您不需要本机查询,以下查询方法应该可以完成这项工作。

Optional<Customer> findByIdAndDeletedFalse(Long id);

请注意,实体已重命名,这使其不那么混乱。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-12
    • 2015-04-22
    • 1970-01-01
    • 1970-01-01
    • 2014-03-14
    相关资源
    最近更新 更多