0

在我的带有 Seam3.2.2 集成的 JSF 项目中,更新不起作用。而是更新值,它将新值插入表中。

请我在这里需要一些帮助。

我的项目流程。
页面.xml:

    <page  view-id="/updateUser.xhtml" action="#{userEditAction.setCurrentUser()}">
        <navigation>
            <rule if-outcome="success">
                <redirect view-id="/secure/admin/user/updateUser.xhtml"/> 
            </rule>
        </navigation>
        <begin-conversation join="true"></begin-conversation>
    </page>

UserEditAction.java 豆:

    @RequestParameter
    private Integer userId;

    @Override
    public String setCurrentUser(){
        System.out.println("Selected  userid ----- " + userId);
        currentUser = userService.getUser(userId);
        return "success";
    }

用户更新.xhtml:

        <h:commandButton value="Update" tabindex="20"
            action="#{userAction.update}">
            <f:param name="userId" value="#{currentUser.userId}" />
        </h:commandButton>

userAction.java Bean

@Name("userAction")
@Stateless
@AutoCreate
public class UserActionImpl implements UserAction {

    @Out(value = "currentUser", scope = ScopeType.CONVERSATION)
    @In(value = "currentUser", scope = ScopeType.CONVERSATION, required = false)
    private CLRPUser currentUser;   

    @In
    private UserService userService;    

    @RequestParameter
    private Integer userId;

    private static final long serialVersionUID = 8282995226262125676L;

    public String update() {
        userService.saveOrUpdate(currentUser);
        return "success";
    }

用户服务.java:

    public Integer saveOrUpdate(CLRPUser user) {
        // TODO Validation...check cell phone number.. email id..
        // user.setLastUpdatedBy(currentUserId);
        user.setLastUpdatedBy(loggedInUser.getId());
        user.getResidentialAddress().setLastUpdatedBy(loggedInUser.getId());
        user.getShippingAddress().setLastUpdatedBy(loggedInUser.getId());

用户映射器.java:

public class UserMapper {

    public static UserEntity mapUserEntity(CLRPUser user) {
        UserEntity userEntity = new UserEntity();

        userEntity.setEmailAddress(user.getEmailAddress());
        userEntity.setFirstName(user.getFirstName());
        userEntity.setLastName(user.getLastName());
        userEntity.setHomeNumber(user.getHomeNumber());
        userEntity.setOfficeNumber(user.getOfficeNumber());
        userEntity.setCellNumber(user.getCellNumber());
        AuditInfo auditInfo = new AuditInfo();
        auditInfo.setLastUpdatedBy(user.getLastUpdatedBy());
        auditInfo.setLastUpdatedTime(user.getLastUpdatedTime());
        userEntity.setAuditInfo(auditInfo);
        userEntity.setType(user.getType());
        userEntity.setPreferenceId(user.getPreferenceId());
        userEntity.setASPCustomerId(user.getAspCustomerId());

        user.getResidentialAddress().setAddressType("R");
        user.getShippingAddress().setAddressType("S");
        AddressEntity residential = AddressMapper.mapAddressEntity(user
                .getResidentialAddress());
        AddressEntity shipping = AddressMapper.mapAddressEntity(user
                .getShippingAddress());
        List<AddressEntity> addressess = new ArrayList<AddressEntity>();
        addressess.add(residential);
        addressess.add(shipping);

        userEntity.setAddresses(new HashSet<AddressEntity>(addressess));

        /*UserLoginEntity userLogin = UserLoginMapper.mapUserLoginEntity(user.getUserLogin());
        List<UserLoginEntity> userLoginn = new ArrayList<UserLoginEntity>();
        userLoginn.add(userLogin);

        userEntity.setUserLogin(new HashSet<UserLoginEntity>(userLoginn));*/
        // userEntity.setCardTypeEntity(cardTypeEntity)
        return userEntity;
    }

JPAUserDAO.java

    public Integer saveOrUpdate(UserEntity newUser) {       
        entityManager.merge(newUser);
        return newUser.getUserId();
    }
4

1 回答 1

0

问题:-
插入正在发生,因为每次您创建UserEntity实体的新实例而不设置其 Id 或主键时都会进行更新。所以保存休眠认为实体是新的并且每次导致插入时都会生成新的ID

解决方案:-
要更正,在您的mapUserEntity() 方法中添加以下行

userEntity.setId(user.getId());

所以你的mapUserEntity()会看起来像

public static UserEntity mapUserEntity(CLRPUser user) {
        UserEntity userEntity = new UserEntity();
        userEntity.setId(user.getId());//Note:-added this line
        userEntity.setEmailAddress(user.getEmailAddress());
        userEntity.setFirstName(user.getFirstName());
        userEntity.setLastName(user.getLastName());
...
}
于 2013-08-10T11:33:29.623 回答