我有一个无状态的EBJ,并且正在使用JPA来管理数据库交互。以下是我需要您帮助的情况。
现在,当将响应发送到客户端时(在事务完成之后),它会向数据库触发更新SQL以更新数据集(在步骤3中进行了修改)。
如果可以看到此操作,则该操作本质上是只读的。但是由于我的数据有很多空间,因此我必须在实体对象中进行修剪。但是这种方法会触发意外的更新SQL。
请让我知道解决此问题的最佳方法,或如何隔离和同步EJB tx和JPA tx。
答案 0 :(得分:0)
您可以声明getCustomer()不支持事务:
$(document).ready(function() {
var begin = 720;
$("#yett").val("Total €" + begin.toFixed(2).replace(/\./g, ","));
var target = document.querySelector("#CalculatorPlacing");
var observer = new MutationObserver(function(mutations) {
checked = mutations[0].target.checked;
var prev = $("#yett")
.val()
.split("€")[1];
if (checked === true) {
total = begin - 300;
$("#yett").val("Total €" + total.toFixed(2).replace(/\./g, ","));
} else {
$("#yett").val("Total €" + begin.toFixed(2).replace(/\./g, ","));
}
});
var config = { attributes: true };
observer.observe(target, config);
$("#CalculatorPlacing").on("change", function() {
var prev = $("#yett")
.val()
.split("€")[1];
if ($(this).prop("checked") == true) {
total = begin - 300;
$("#yett").val("Total €" + total.toFixed(2).replace(/\./g, ","));
} else {
$("#yett").val("Total €" + begin.toFixed(2).replace(/\./g, ","));
}
});
$("#CalculatorTransport").change(function() {
if ($("#CalculatorTransport").is(":checked") == true) {
// off
$("#CalculatorPlacing").attr("disabled", true);
$("#CalculatorPlacing").prop("checked", true);
}
});
});
在Java EE教程中了解有关事务的更多信息: https://docs.oracle.com/javaee/7/tutorial/transactions003.htm
答案 1 :(得分:0)
不必为了满足您的要求而烦恼交易管理。
您的代码应在从DAO返回之前调用javax.persistence.EntityManager.clear()。这将使您的实体bean与持久性上下文分离,持久性上下文将不再对其进行跟踪。来自Java文档:
清除持久性上下文,导致所有被管理实体分离。对尚未刷新到数据库的实体所做的更改将不会保留。