我有一个java代码,我正在更新staff实体。我正在使用应用程序管理的实体管理器。我在登录页面中有一个条件,如果用户提供了正确的用户名/密码,他的上次登录时间将被更新。
但是更新没有发生,我得到一个实体已被分离的异常。请参阅下面的代码:-
public class GenericDaoImpl<T> implements GenericDao<T> {
private static final String PERSISTENCE_UNIT_NAME = "expenseCalculator";
private static EntityManagerFactory factory;
protected static EntityManager em;
private EntityTransaction etr;
protected Class<T> domainClass;
/** The domain object name. */
protected String domainObjectName = null;
public synchronized static EntityManagerFactory getfactory(){
if (null == factory) {
factory = Persistence.createEntityManagerFactory(PERSISTENCE_UNIT_NAME);
}
return factory;
}
@SuppressWarnings("unchecked")
public GenericDaoImpl() {
em = getfactory().createEntityManager();
domainClass = (Class<T>) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0];
Entity entityAnn = (Entity) domainClass.getAnnotation(Entity.class);
if (entityAnn != null && !entityAnn.name().equals("")) {
domainObjectName = entityAnn.name();
} else {
domainObjectName = domainClass.getSimpleName();
}
}
public T create(T t) {
etr = em.getTransaction();
etr.begin();
em.persist(t);
etr.commit();
return t;
}
}
public Staff authenticateStaff(LoginBean loginBean) {
staff = staffDao.findUnique(loginBean.getUserName());
if (null != staff) {
if (staff.getIsBlocked() == 'N' && staff != null && staff.getUserName().equals(loginBean.getUserName())
&& staff.getPassword().equals(loginBean.getPassword())) {
staff.setLastLogin(new Date());
//This is giving an exception..
new StaffDaoImpl().create(staff);
return staff;
} else if (staff.getIsBlocked() == 'N' && staff != null
&& staff.getUserName().equals(loginBean.getUserName())) {
updateUnsuccessfulAttemptsAndBlockedStatus(staff);
}
}
return null;
}
staffDAOImpl.java:-
@Repository
@Component
public class StaffDaoImpl extends GenericDaoImpl<Staff> implements StaffDao {
public Staff findUnique(String userName) {
TypedQuery<Staff> query = em.createNamedQuery(domainObjectName + ".findByUserName", domainClass);
query.setParameter("username", userName);
Staff staff = null;
try {
staff = query.getSingleResult();
} catch (NoResultException e) {
staff = null;
}
return staff;
}
在StaffServiceImpl.java类中,您将看到我通过调用“StaffDAO.findUnique(loginBean.getUserName());”来管理Staff实体。但实体工作人员是独立的,这给了我一个例外。任何帮助都是非常感谢的。
我已经得到了答案,实际上“staffdao.findunique(loginBean.getUsername())”并不能管理Staff实体,所以我必须使用merge来管理Staff实体,并且对它的任何更改都保留到DB中。
问题内容: “独立实体”是什么意思?在交易期间如何将托管实体转换为独立实体? 问题答案: 分离实体是状态不能由JPA提供程序反映的实体。 换句话说,如果您更改其状态(即通过setter方法),则这些更改将不会保存到基础数据库中,因为JPA提供程序不必“观察”此类实体。 如果实体E1是受管实体,则可以使其分离调用(非常合理的命名)方法。您还可以使用它将清除整个PersistenceContext并有
我目前的项目是用JavaFX完成的。我使用属性将(双向)视图字段绑定到bean(使用JFXtras的BeanPathAdapter)。 我选择用JPA和ObjectDB作为模型。 这是我第一次在独立的项目中使用JPA,这里我面临的是托管实体的问题。 实际上,我将托管实体绑定到视图字段,当视图字段的值更改时,实体会更新...和数据库也是如此。 我正在尝试找到一种手动保存/合并实体的方法,以便我可以询
问题内容: 下面给出从到的一对多关系。 部门(家长): 员工(孩子): 合并如下所示的托管实体(子实体)(在EJB中使用CMT), 不会更新数据库表中的相应员工行。仅当从中的子关系中删除时,才会发生这种情况。 为什么表中的行没有更新?关于此示例的唯一目的是什么? 我当前正在使用具有JPA 2.1的EclipseLink 2.6.0。 问题答案: 级联应该始终从父级传播到子级,而不是相反。 在您的情
了解如何配置WAS或OpenJPA,以便通过容器管理的实体管理器使用容器管理的身份验证。 试图通过在JNDI中注册为“JDBC/DB2”(指Oracle)的JDBC数据源访问Oracle数据库,该数据源在persistence.xml中定义。 persistence.xml 但是,当访问持久性单元的容器管理实体管理器时,会抛出ORA-01017无效的usrname/password。如果在pers
托管 本页告诉你如何在自己的服务器上托管 .crx文件。如果你仅仅通过Chrome Web Store发布扩展,应用,或者主题那么你不需要本页。取而代之的是查阅Chrome Web Store帮助和开发者文档。 注意:如果你已经把扩展发布到扩展库,扩展就会合并到Chrome Web Store里。 按照惯例, 无论是Chrome Web Store还是特定服务器所提供的扩展, 可安装的web ap
主要内容:实例,运行测试结果以下代码显示了如何进行bean注入。 我们先定义一个消息bean,它有一个字符串属性来存储消息。 然后我们再定义另一个托管bean,并使用注解注入。 实例 打开 NetBean8.2,创建一个名为: InjectManagedBeans 的工程,并加入以下文件代码。 以下是文件:UserBean.java 中的代码 - 以下是是文件:index.xhtml 中的代码 - 以下是文件:Message