当前位置: 首页 > 知识库问答 >
问题:

JPA GetSingleResult-EntityNotFound异常

颛孙和颂
2023-03-14
public static Object getSingleResultOrNull(Query q){
        try{
            return q.getSingleResult();
        }catch(NoResultException| EntityNotFoundException enfex){
            System.out.println(enfex.getMessage());
            enfex.printStackTrace();
            return null;
        }catch(NonUniqueResultException ex){
            ex.printStackTrace();
            throw ex;
        }
    }
tagName = tagName.trim().toLowerCase();
Tags tag = (Tags) getSingleResultOrNull(namedQuery("Tags.findByName")
                                        .setParameter("name", tagName));

标记类:

@Entity @Table(name = "tags") @XmlRootElement @NamedQueries({
    @NamedQuery(name = "Tags.findByName", query = "SELECT t FROM Tags t WHERE t.name = :name")}) 
public class Tags implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "id")
    private Integer id;
    @Basic(optional = false)
    @Column(name = "name")
    private String name;

编辑:正在添加ProductTags。类

public class ProductTags implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "id")
    private Integer id;
    @JsonIgnore
    @Column(name = "created")
    @Temporal(TemporalType.TIMESTAMP)
    private Date created;
    @JsonIgnore
    @Column(name = "last_updated")
    @Temporal(TemporalType.TIMESTAMP)
    private Date lastUpdated;
    @JsonIgnore
    @Column(name = "last_updated_by")
    private String lastUpdatedBy;
    @JsonIgnore
    @JoinColumn(name = "prod_id", referencedColumnName = "id")
    @ManyToOne(optional = false)
    private Product prod;
    @JoinColumn(name = "tag_id", referencedColumnName = "id")
    @ManyToOne(optional = false)
    private Tags tag;

根据getSingleResult的API规范,只应抛出以下异常:

    null

我知道编写getSingleResultOrNull方法的另一种方法,但在这种情况下我没有发现问题。

对此我们非常感谢您的帮助。

共有1个答案

丘智志
2023-03-14

我相信你的问题是在之前的某个步骤中引起的。查看堆栈跟踪,在调用所显示的方法之前有一行:

controllers.ProductController.updateProductInfo(ProductController.java:282)

也许您正在更新updateProductInfo内部某个对象的状态,而Hibernate正在刷新会话,此时您调用了getSingleResultOrNull方法。

这里有一些类似的情况,您也可以查看一下:已删除的实体传递给持久异常

 类似资料:
  • 应用程序通常会通过抛出另一个异常来响应异常。 实际上,第一个异常引起第二个异常。 它可以是非常有助于用户知道什么时候一个异常导致另一个异常。 “异常链(Chained Exceptions)”帮助程序员做到这一点。 以下是Throwable中支持异常链的方法和构造函数。 Throwable getCause() Throwable initCause(Throwable) Throwable(St

  • 你可以使用raise语句 引发 异常。你还得指明错误/异常的名称和伴随异常 触发的 异常对象。你可以引发的错误或异常应该分别是一个Error或Exception类的直接或间接导出类。 如何引发异常 例13.2 如何引发异常 #!/usr/bin/python # Filename: raising.py classShortInputException(Exception):     '''A u

  • 问题内容: 异常存储在哪里?堆,堆。如何为异常分配和释放内存?现在,如果您有多个需要处理的异常,是否创建了所有这些异常的对象? 问题答案: 我假设为异常分配的内存分配方式与所有其他对象(在堆上)分配方式相同。 这曾经是个问题,因为您不能为OutOfMemoryError分配内存,这就是直到Java 1.6之前 才没有堆栈跟踪的原因。现在,它们也为stacktrace预分配了空间。 如果您想知道在抛

  • 异常Exception 以传统的try,catch抓取异常 如果在业务层不catch,框架层会捕捉,并返回一个500的server error响应。 如果在开发环境会返回一个500的具体错误的trace响应。 try { throw new \Exception("Error Processing Request", 1); //yield throwExc

  • 因为Java编程语言不需要捕获方法或声明未检查异常(包括 RuntimeException、Error及其子类),程序员可能会试图编写只抛出未检查异常的代码,或使所有异常子类继承自RuntimeException。这两个快捷方式都允许程序员编写代码,而不必担心编译器错误,也不用担心声明或捕获任何异常。虽然这对于程序员似乎很方便,但它避开了捕获或者声明异常的需求,并且可能会导致其他人在使用您的类而产

  • 当面对选择抛出异常的类型时,您可以使用由别人编写的异常 - Java平台提供了许多可以使用的异常类 - 或者您可以编写自己的异常类。 如果您对任何以下问题回答“是”,您应该编写自己的异常类;否则,你可以使用别人的。 你需要一个Java平台中没有表示的异常类型吗? 如果用户能够区分你的异常与由其他供应商编写的类抛出的异常吗? 你的代码是否抛出不止一个相关的异常? 如果您使用他人的例外,用户是否可以访