java singleresult方法_JPA getSingleResult - EntityNotfound Exception

嗨,我试图通过JPA getSingleResult获取一个java实体,但它抛出一个我在API specs找不到的异常

方法:

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;

Edit : 添加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规范,只应抛出以下异常:

NoResultException - 如果没有结果

NonUniqueResultException - 如果有多个结果

IllegalStateException - 如果调用Java持久性查询语言UPDATE或DELETE语句

QueryTimeoutException - 如果查询执行超过设置的查询超时值,则仅回滚该语句

TransactionRequiredException - 如果已设置锁定模式且没有交易

PessimisticLockException - 如果悲观锁定失败并且回滚事务

LockTimeoutException - 如果悲观锁定失败并且仅回滚该语句

PersistenceException - 如果查询执行超过查询超时值集并且回滚事务

但是,我得到了javax.persistence.EntityNotFoundException的一个奇怪的异常:传递给persist的已删除实体:[models.ProductTags#]

对于一个完全(不完全是因为ProductTags有一个Tags对象的外键,但在保存Tags对象的上下文中,我没有看到任何关系 . )无关的实体 .

传递给持久化的已删除实体:[models.ProductTags#] javax.persistence.EntityNotFoundException:在org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1369)org中传递给persist:[models.ProductTags#]的已删除实体.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1315)位于controllers.ProductController的controllers.PowerController.getSingleResultOrNull(PowerController.java:68)的org.hibernate.ejb.QueryImpl.getSingleResult(QueryImpl.java:307) . 在router.Routes $$ anonfun $ routes $ 1 $$ anonfun $ applyOrElse $ 4 $$ anonfun $ apply $ 4.apply(Routes.scala:1584)at router.Routes $$ anonfun $ routes $ 1 $ updateProductInfo(ProductController.java:282)在play.core.routing.HandlerInvokerFactory $:在play.core.routing.HandlerInvokerFactory $$匿名$ 4.resultCall(136 HandlerInvoker.scala):$ $ anonfun $ applyOrElse 4 $$ anonfun $ $申请4.适用(1584 Routes.scala) JavaActionInvokerFactory $$ anon $ 14 $$ anon $ 3 $$ anon $ 1.invocation(HandlerInvoker.scala:127)at play.core.j.Ja vaAction $$ anon $ 1.call(JavaAction.scala:70)at play.http.DefaultHttpRequestHandler $ 1.call(DefaultHttpRequestHandler.java:20)at interceptors.ProductAction.call(ProductAction.java:65)at play.db.jpa . TransactionalAction.lambda $在play.db.jpa.TransactionAction $$ Lambda $ 43 / 469822182.apply(未知来源)在play.db.jpa.DefaultJPAApi.withTransaction调用$ 5(TransactionalAction.java:19)(DefaultJPAApi.java:136) at play.db.jpa.JPA.withTransaction(JPA.java:159)at play.db.jpa.TransactionalAction.call(TransactionalAction.java:16)at play.core.j.JavaAction $$ anonfun $ 7.apply(JavaAction) .scala:94)at play.core.j.JavaAction $$ anonfun $ 7.apply(JavaAction.scala:94)at scala.concurrent.impl.Future $ PromiseCompletingRunnable.liftedTree1 $ 1(Future.scala:24)at scala.concurrent .impl.Future $ PromiseCompletingRunnable.run(Future.scala:24)at play.core.j.HttpExecutionContext $$ anon $ 2.run(HttpExecutionContext.scala:40)at play.api.libs.iteratee.Execution $ trampoline $ . 在play.core.j.HttpExecu执行(Execution.scala:70) stepContext.execute(HttpExecutionContext.scala:32)at scala.concurrent.impl.Future $ .apply(Future.scala:31)at scala.concurrent.Future $ .apply(Future.scala:485)at play.core.j .JavaAction.apply(JavaAction.scala:94)at play.api.mvc.Action $$ anonfun $ apply $ 1 $$ anonfun $ apply $ 4 $$ anonfun $ apply $ 5.apply(Action.scala:105)at play.api .mvc.Action $$ anonfun $ apply $ 1 $$ anonfun $ apply $ 5.apply(Action.scala:105)at play.utils.Threads $ .withContextClassLoader(Threads.scala:21)at play . api.mvc.Action $$ anonfun $ apply $ 1 $$ anonfun $ apply $ 4.apply(Action.scala:104)at play.api.mvc.Action $$ anonfun $ apply $ 1 $$ anonfun $ apply $ 4.apply(Action .scala:103)scala.Option.map(Option.scala:145)at play.api.mvc.Action $$ anonfun $ apply $ 1.apply(Action.scala:103)at play.api.mvc.Action $ $ anonfun $ apply $ 1.apply(Action.scala:96)at play.api.libs.iteratee.Iteratee $$ anonfun $ mapM $ 1.apply(Iteratee.scala:524)at play.api.libs.iteratee.Iteratee $ $ anonfun $ mapM $ 1.apply(Iteratee.scala:524)at play.api.libs.iteratee.Iteratee $$ anonfun $ fla tMapM $ 1.apply(Iteratee.scala:560)at play.api.libs.iteratee.Iteratee $$ anonfun $ flatMapM $ 1.apply(Iteratee.scala:560)at atplay.api.libs.iteratee.Iteratee $$ anonfun $ flatMap $ 1 $$ anonfun $ apply $ 14.apply(Iteratee.scala:537)at play.api.libs.iteratee.Iteratee $$ anonfun $ flatMap $ 1 $$ anonfun $在scala.concurrent.impl.Future $ PromiseCompletingRunnable.liftedTree1 $ 1(Future.scala:24)scala.concurrent.impl.Future $ PromiseCompletingRunnable.run(Future.scala:24)申请$ 14.apply(Iteratee.scala:537) at akka.dispatch.TaskInvocation.run(AbstractDispatcher.scala:40)at akka.dispatch.ForkJoinExecutorConfigurator $ AkkaForkJoinTask.exec(AbstractDispatcher.scala:397)at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260)at at scala.concurrent.forkjoin.ForkJoinPool $ WorkQueue.runTask(ForkJoinPool.java:1339)scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979)scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java: 107)

我知道另一种编写getSingleResultOrNull方法的方法,但在这种情况下我无法找到问题 .

对此有任何帮助表示赞赏 .

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值