[英]java jpa hibernate rollback on onetomany
我的 jpa 有一個模型表單頭,我認為它是父級
@Entity
@Table(name = "Form_Header")
public class FormHeader {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "header_id", nullable = false)
private Long headerId;
@OneToMany(
mappedBy = "formHeader",
cascade = CascadeType.ALL,
orphanRemoval = true
)
private List<FormProdItem> formProdItem;
-- more fields--
-- getter and setter--
}
和另一個我認為是孩子的模型。 更多關於單向
@Entity
@Table(name = "Form_Prod_Item")
public class FormProdItem {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "item_id", nullable = false)
private Long itemId;
@Column(name = "header_id", nullable = false)
private Long headerId;
@ManyToOne(fetch = FetchType.LAZY)
private FormHeader formHeader;
-- more fields --
-- getter and setter --
}
和我的 DAO 訪問數據庫
@Repository
@Transactional
public class FormHeaderDAO {
@Autowired
private EntityManager entityManager;
public List<FormHeader> gettest() {
try {
String sql = " SELECT e FROM FromHeader e "
+ " WHERE e.isDeleted = 0 ";
Query query = entityManager.createQuery(sql, FormHeader.class);
return (List<FormHeader>) query.getSingleResult();
} catch (NoResultException e) {
return null;
} catch (Exception e) {
return null;
}
}
}
我收到了這個錯誤,沒有任何進一步的細節
2020-09-16 09:19:10.324 ERROR 9624 --- [nio-8080-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.transaction.UnexpectedRollbackException: Transaction silently rolled back because it has been marked as rollback-only] with root cause
org.springframework.transaction.UnexpectedRollbackException: Transaction silently rolled back because it has been marked as rollback-only
即使我在 sql "join e.formProdIem f" 中添加錯誤也是一樣的,它不會提供更多的細節。 知道為什么嗎?
我的猜測是您收到了NonUniqueResultException,因為您的查詢返回了多個結果並且您調用了query.getSingleResult()但您沒有看到這一點,因為您正在捕獲異常並以靜默方式丟棄它們。 這是一個非常糟糕的主意。
@Slf4j
@Repository
@Transactional
public class FormHeaderDAO {
@Autowired
private EntityManager entityManager;
public List<FormHeader> gettest() {
try {
String sql = " SELECT e FROM FromHeader e "
+ " WHERE e.isDeleted = 0 ";
Query query = entityManager.createQuery(sql, FormHeader.class);
return (List<FormHeader>) query.getSingleResult();
} catch (NoResultException e) {
log.error(e)
return null;
} catch (NonUniqueResultException e) {
log.error(e)
return null;
} catch (Exception e) {
log.error(e)
return null;
}
}
}
如果您沒有 Slf4j,請使用 System.err.println() 或斷點來確認您的代碼現在正在吞入哪種異常。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.