合并操作无异常但对数据库无影响 Glassfish 4.1 JPA
Merge operation without exception but with no impact on the database Glassfish 4.1 JPA
我得到一个带有字符串字段的 table 并尝试更新此字段并通过 EntityManager 将更新合并到数据库。这已经完成并且没有异常,但我认为对数据库没有影响并且 运行 不知道那里有什么。希望有人有想法。在下面的示例 match != null
和两个打印语句中,我将预期值写入我的日志。但是 t运行saction 中的合并对数据库没有影响,即使提交已终止。
@Named
@SessionScoped
@ManagedBean
public class LoginController implements Serializable {
@PersistenceUnit
private EntityManagerFactory emf;
public String mymethod(){
...
match.setPwdResetId(rs);
System.out.println("reset it is now "+match.getPwdResetId());
try{
ut.begin();
emf.createEntityManager().merge(match);
ut.commit();
}
catch(Exception e){
FacesMessage m2 = new FacesMessage("Values could not be saved. ");
FacesContext.getCurrentInstance().addMessage("ResetForm", m2);
System.out.println("exceptio persisting "+e);
return "message.jsf";
}
System.out.println("reset it is now2 "+match.getPwdResetId());
请分离实体并重试。
您可以在 jpa 2 规范中阅读更多内容。我 post 合并操作的示例:
The semantics of the merge operation applied to an entity X are as
follows:
If X is a detached entity, the state of X is copied onto a pre-existing managed entity instance X' of the same identity or a new
managed copy X' of X is created.
If X is a new entity instance, a new managed entity instance X' is created and the state of X is copied into the new managed entity
instance X'.
If X is a removed entity instance, an IllegalArgumentException will be thrown by the merge operation (or the transaction commit will
fail).
If X is a managed entity, it is ignored by the merge operation, however, the merge operation is cascaded to entities referenced by
relationships from X if these relationships have been annotated with
the cascade element value cascade=MERGE or cascade=ALL annotation.
For all entities Y referenced by relationships from X having the cascade element value cascade=MERGE or cascade=ALL, Y is merged
recursively as Y'. For all such Y referenced by X, X' is set to
reference Y'. (Note that if X is managed then X is the same object as
X'.)
If X is an entity merged to X', with a reference to another entity Y, where cascade=MERGE or cascade=ALL is not specified, then
navigation of the same association from X' yields a reference to a
managed object Y' with the same persistent identity as Y.
The persistence provider must not merge fields marked LAZY that have
not been fetched: it must ignore such fields when merging. Any Version
columns used by the entity must be checked by the persistence runtime
implementation during the merge operation and/or at flush or commit
time. In the absence of Version columns there is no additional version
checking done by the persistence provider runtime during the merge
operation.
你可以找到完整的 pdf here
我得到一个带有字符串字段的 table 并尝试更新此字段并通过 EntityManager 将更新合并到数据库。这已经完成并且没有异常,但我认为对数据库没有影响并且 运行 不知道那里有什么。希望有人有想法。在下面的示例 match != null
和两个打印语句中,我将预期值写入我的日志。但是 t运行saction 中的合并对数据库没有影响,即使提交已终止。
@Named
@SessionScoped
@ManagedBean
public class LoginController implements Serializable {
@PersistenceUnit
private EntityManagerFactory emf;
public String mymethod(){
...
match.setPwdResetId(rs);
System.out.println("reset it is now "+match.getPwdResetId());
try{
ut.begin();
emf.createEntityManager().merge(match);
ut.commit();
}
catch(Exception e){
FacesMessage m2 = new FacesMessage("Values could not be saved. ");
FacesContext.getCurrentInstance().addMessage("ResetForm", m2);
System.out.println("exceptio persisting "+e);
return "message.jsf";
}
System.out.println("reset it is now2 "+match.getPwdResetId());
请分离实体并重试。 您可以在 jpa 2 规范中阅读更多内容。我 post 合并操作的示例:
The semantics of the merge operation applied to an entity X are as follows:
If X is a detached entity, the state of X is copied onto a pre-existing managed entity instance X' of the same identity or a new managed copy X' of X is created.
If X is a new entity instance, a new managed entity instance X' is created and the state of X is copied into the new managed entity
instance X'.If X is a removed entity instance, an IllegalArgumentException will be thrown by the merge operation (or the transaction commit will
fail).If X is a managed entity, it is ignored by the merge operation, however, the merge operation is cascaded to entities referenced by
relationships from X if these relationships have been annotated with
the cascade element value cascade=MERGE or cascade=ALL annotation.For all entities Y referenced by relationships from X having the cascade element value cascade=MERGE or cascade=ALL, Y is merged
recursively as Y'. For all such Y referenced by X, X' is set to
reference Y'. (Note that if X is managed then X is the same object as X'.)If X is an entity merged to X', with a reference to another entity Y, where cascade=MERGE or cascade=ALL is not specified, then
navigation of the same association from X' yields a reference to a
managed object Y' with the same persistent identity as Y.The persistence provider must not merge fields marked LAZY that have not been fetched: it must ignore such fields when merging. Any Version columns used by the entity must be checked by the persistence runtime implementation during the merge operation and/or at flush or commit time. In the absence of Version columns there is no additional version checking done by the persistence provider runtime during the merge operation.
你可以找到完整的 pdf here