Jpa 为什么子实体的id在EclipseLink中的响应消息中返回0?

Jpa 为什么子实体的id在EclipseLink中的响应消息中返回0?,jpa,eclipselink,one-to-one,Jpa,Eclipselink,One To One,我在我的Member和MemberRoles表之间使用一对一关联。我希望他们与数据库中的PK和FK共享相同的id,并做到了这一点。但我还有一个问题。当我插入一个成员时,一个MemberRole记录将与其一起插入,并且成员记录在返回响应中具有正确的id,但MemberRole id不正确。它返回0,如下所示: { "result": "Bulk user member saving is successfull. Members' informations are:", "memb

我在我的Member和MemberRoles表之间使用一对一关联。我希望他们与数据库中的PK和FK共享相同的id,并做到了这一点。但我还有一个问题。当我插入一个成员时,一个MemberRole记录将与其一起插入,并且成员记录在返回响应中具有正确的id,但MemberRole id不正确。它返回0,如下所示:

{
    "result": "Bulk user member saving is successfull. Members' informations are:",
    "memberList": [
        {
            "id": 2,
            "firstName": "Michael",
            "lastName": "Schumacher",
            "email": "ilkay.gune2l@kod5.org",
            "enabled": false,
            "memberLanguageCode": "tr",
            "roleOfMember": {
                "id": 0,
                "email": "ilkay.gune2l@kod5.org",
                "role": "ROLE_USER"
            }
        }
    ]
}
package com.ilkaygunel.service;

import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
import java.util.logging.Level;
import java.util.logging.Logger;

import javax.mail.MessagingException;

import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.stereotype.Service;

import com.ilkaygunel.constants.ConstantFields;
import com.ilkaygunel.entities.Member;
import com.ilkaygunel.entities.MemberRoles;
import com.ilkaygunel.exception.CustomException;
import com.ilkaygunel.exception.ErrorCodes;
import com.ilkaygunel.pojo.MemberOperationPojo;

@Service
public class MemberSaveService extends BaseService {

    public MemberOperationPojo addUserMember(List<Member> memberList) {
        return addBulkMember(memberList, ConstantFields.ROLE_USER.getConstantField());
    }

    public MemberOperationPojo addAdminMember(List<Member> memberList) {
        return addBulkMember(memberList, ConstantFields.ROLE_ADMIN.getConstantField());
    }

    public MemberOperationPojo addBulkMember(List<Member> memberList, String role) {
        Logger LOGGER = loggingUtil.getLoggerForMemberSaving(this.getClass());
        LOGGER.log(Level.INFO, resourceBundleMessageManager.getValueOfProperty(role + "_bulkMemberAddingMethod", "en"));
        MemberOperationPojo memberOperationPojo = new MemberOperationPojo();
        List<Member> savedMemberList = new ArrayList<>();
        try {
            memberUtil.checkEmailAddressAndLanguageOnMemberList(memberList, LOGGER);
            for (Member member : memberList) {
                addOneMember(member, role, LOGGER);
                savedMemberList.add(member);
            }
            memberOperationPojo.setResult(
                    resourceBundleMessageManager.getValueOfProperty(role + "_bulkMemberAddingSuccessfull", "en"));
            memberOperationPojo.setMemberList(memberUtil.removeFieldsFromReturningMember(savedMemberList));
            LOGGER.log(Level.INFO,
                    resourceBundleMessageManager.getValueOfProperty(role + "_bulkMemberAddingSuccessfull", "en")
                            + memberList);
        } catch (CustomException customException) {
            LOGGER.log(Level.SEVERE,
                    resourceBundleMessageManager.getValueOfProperty(role + "_bulkMemberAddingFaled", "en")
                            + customException.getErrorCode() + " " + customException.getErrorMessage());
            memberOperationPojo.setErrorCode(customException.getErrorCode());
            memberOperationPojo.setResult(customException.getErrorMessage());
        } catch (Exception e) {
            LOGGER.log(Level.SEVERE,
                    resourceBundleMessageManager.getValueOfProperty(role + "_bulkMemberAddingFaled", "en")
                            + e.getMessage());
            memberOperationPojo.setErrorCode(ErrorCodes.ERROR_10.getErrorCode());
            memberOperationPojo.setResult(e.getMessage());
        }
        return memberOperationPojo;
    }

    private void addOneMember(Member member, String role, Logger LOGGER) throws MessagingException {
        MemberOperationPojo memberOperationPojo = new MemberOperationPojo();
        LOGGER.log(Level.INFO, resourceBundleMessageManager.getValueOfProperty(role + "_memberAddingMethod",
                member.getMemberLanguageCode()));
        member.setPassword(getHashedPassword(member.getPassword()));
        member.setEnabled(false);
        addMemberRolesObject(role, member);
        addActivationToken(member);
        memberFacade.create(member);
        // mailUtil.sendActivationMail(member.getEmail(), member.getActivationToken());
        memberOperationPojo.setResult(resourceBundleMessageManager.getValueOfProperty(role + "_memberAddingSuccessfull",
                member.getMemberLanguageCode()));
        LOGGER.log(Level.INFO, resourceBundleMessageManager.getValueOfProperty(role + "_memberAddingSuccessfull",
                member.getMemberLanguageCode()) + member);
    }

    private String getHashedPassword(String rawPassword) {
        return new BCryptPasswordEncoder().encode(rawPassword);
    }

    private void addMemberRolesObject(String role, Member member) {
        MemberRoles rolesOfMember = new MemberRoles();
        rolesOfMember.setRole(role);
        rolesOfMember.setEmail(member.getEmail());
        rolesOfMember.setMember(member);
        member.setRoleOfMember(rolesOfMember);
    }

    private void addActivationToken(Member member) {
        String activationToken = UUID.randomUUID().toString();
        member.setActivationToken(activationToken);

        LocalDateTime activationTokenExpDate = LocalDateTime.now().plusDays(1);
        // LocalDateTime activationTokenExpDate = LocalDateTime.now();//Use for expire
        // date test!
        member.setActivationTokenExpDate(activationTokenExpDate);
    }
}
package com.ilkaygunel.restservice;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

import com.ilkaygunel.entities.Member;
import com.ilkaygunel.pojo.MemberOperationPojo;
import com.ilkaygunel.service.MemberSaveService;

@RestController
@RequestMapping("/memberPostWebServiceEndPoint")
public class MemberSaveWebServiceEndPoint {
    @Autowired
    private MemberSaveService memberSaveService;

    @RequestMapping(value = "/saveUserMember", method = RequestMethod.POST)
    public ResponseEntity<MemberOperationPojo> saveUserMember(@RequestBody List<Member> memberList) {
        MemberOperationPojo memberOperationPojo = memberSaveService.addUserMember(memberList);
        return new ResponseEntity<MemberOperationPojo>(memberOperationPojo, HttpStatus.OK);
    }

    @RequestMapping(value = "/saveAdminMember", method = RequestMethod.POST)
    public ResponseEntity<MemberOperationPojo> saveAdminMember(@RequestBody List<Member> memberList) {
        MemberOperationPojo memberOperationPojo = memberSaveService.addAdminMember(memberList);
        return new ResponseEntity<MemberOperationPojo>(memberOperationPojo, HttpStatus.OK);
    }
}
我的成员实体类:

package com.ilkaygunel.entities;

import java.time.LocalDateTime;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToOne;
import javax.persistence.PrimaryKeyJoinColumn;
import javax.persistence.Table;

import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonInclude.Include;

@Entity
@JsonInclude(Include.NON_NULL)
@NamedQueries({ @NamedQuery(name = "Member.findAll", query = "select m from Member m"),
        @NamedQuery(name = "Member.findByFirstName", query = "select m from Member m where m.firstName =:firstName"),
        @NamedQuery(name = "Member.findPasswordOfMember", query = "select m.password from Member m where m.id =:id"),
        @NamedQuery(name = "Member.findByActivationToken", query = "select m from Member m where m.activationToken =:activationToken"),
        @NamedQuery(name = "Member.findByEmail", query = "select m from Member m where m.email =:email") })
@Table(name = "MEMBER")
public class Member {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "MEMBER_ID")
    private long id;
    @Column(nullable = false)
    private String firstName;
    @Column(nullable = false)
    private String lastName;
    @Column(nullable = false, updatable = false)
    private String email;
    @Column(nullable = false, updatable = false)
    private boolean enabled;
    @Column(nullable = false)
    private String password;
    @Column(nullable = false)
    private String memberLanguageCode;
    @Column(updatable = false)
    @JsonIgnore
    private String activationToken;
    @Column(updatable = false)
    @JsonIgnore
    private LocalDateTime activationTokenExpDate;

    @OneToOne(cascade = CascadeType.ALL, mappedBy = "member", optional = false)
    @PrimaryKeyJoinColumn(name = "MEMBER_ID")
    private MemberRoles roleOfMember;

    @Override
    public String toString() {
        return String.format("Member [id=%d, firstName='%s', lastName='%s', email='%s']", id, firstName, lastName,
                email);
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
        if (null != roleOfMember) {
            roleOfMember.setId(id);
        }
    }

    public String getFirstName() {
        return firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public boolean isEnabled() {
        return enabled;
    }

    public void setEnabled(boolean enabled) {
        this.enabled = enabled;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public MemberRoles getRoleOfMember() {
        return roleOfMember;
    }

    public void setRoleOfMember(MemberRoles roleOfMember) {
        this.roleOfMember = roleOfMember;
    }

    public String getActivationToken() {
        return activationToken;
    }

    public void setActivationToken(String activationToken) {
        this.activationToken = activationToken;
    }

    public LocalDateTime getActivationTokenExpDate() {
        return activationTokenExpDate;
    }

    public void setActivationTokenExpDate(LocalDateTime activationTokenExpDate) {
        this.activationTokenExpDate = activationTokenExpDate;
    }

    public String getMemberLanguageCode() {
        return memberLanguageCode;
    }

    public void setMemberLanguageCode(String memberLanguageCode) {
        this.memberLanguageCode = memberLanguageCode;
    }
}
和我的MemberRoles实体类:

package com.ilkaygunel.entities;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.MapsId;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToOne;
import javax.persistence.Table;

import com.fasterxml.jackson.annotation.JsonIgnore;

@Entity
@NamedQueries({
        @NamedQuery(name = "MemberRoles.findByEmail", query = "select mr from MemberRoles mr where mr.email = :email") })
@Table(name = "MEMBERROLES")
public class MemberRoles {
    @Id
    @Column(name = "MEMBERROLES_ID")
    private long id;
    private String email;
    private String role;

    @MapsId
    @OneToOne(optional = false)
    @JoinColumn(name = "MEMBERROLES_ID", unique = true, nullable = false, updatable = false)
    @JsonIgnore
    private Member member;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getRole() {
        return role;
    }

    public void setRole(String role) {
        this.role = role;
    }

    public Member getMember() {
        return member;
    }

    public void setMember(Member member) {
        this.member = member;
    }
}
当我插入一个成员记录时,我在数据库中检查它,发现该成员记录和MemberRoles记录具有相同的id。但为什么响应消息中的MemberRoles区域的id为0

我的MemberSaveService类如下所示:

{
    "result": "Bulk user member saving is successfull. Members' informations are:",
    "memberList": [
        {
            "id": 2,
            "firstName": "Michael",
            "lastName": "Schumacher",
            "email": "ilkay.gune2l@kod5.org",
            "enabled": false,
            "memberLanguageCode": "tr",
            "roleOfMember": {
                "id": 0,
                "email": "ilkay.gune2l@kod5.org",
                "role": "ROLE_USER"
            }
        }
    ]
}
package com.ilkaygunel.service;

import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
import java.util.logging.Level;
import java.util.logging.Logger;

import javax.mail.MessagingException;

import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.stereotype.Service;

import com.ilkaygunel.constants.ConstantFields;
import com.ilkaygunel.entities.Member;
import com.ilkaygunel.entities.MemberRoles;
import com.ilkaygunel.exception.CustomException;
import com.ilkaygunel.exception.ErrorCodes;
import com.ilkaygunel.pojo.MemberOperationPojo;

@Service
public class MemberSaveService extends BaseService {

    public MemberOperationPojo addUserMember(List<Member> memberList) {
        return addBulkMember(memberList, ConstantFields.ROLE_USER.getConstantField());
    }

    public MemberOperationPojo addAdminMember(List<Member> memberList) {
        return addBulkMember(memberList, ConstantFields.ROLE_ADMIN.getConstantField());
    }

    public MemberOperationPojo addBulkMember(List<Member> memberList, String role) {
        Logger LOGGER = loggingUtil.getLoggerForMemberSaving(this.getClass());
        LOGGER.log(Level.INFO, resourceBundleMessageManager.getValueOfProperty(role + "_bulkMemberAddingMethod", "en"));
        MemberOperationPojo memberOperationPojo = new MemberOperationPojo();
        List<Member> savedMemberList = new ArrayList<>();
        try {
            memberUtil.checkEmailAddressAndLanguageOnMemberList(memberList, LOGGER);
            for (Member member : memberList) {
                addOneMember(member, role, LOGGER);
                savedMemberList.add(member);
            }
            memberOperationPojo.setResult(
                    resourceBundleMessageManager.getValueOfProperty(role + "_bulkMemberAddingSuccessfull", "en"));
            memberOperationPojo.setMemberList(memberUtil.removeFieldsFromReturningMember(savedMemberList));
            LOGGER.log(Level.INFO,
                    resourceBundleMessageManager.getValueOfProperty(role + "_bulkMemberAddingSuccessfull", "en")
                            + memberList);
        } catch (CustomException customException) {
            LOGGER.log(Level.SEVERE,
                    resourceBundleMessageManager.getValueOfProperty(role + "_bulkMemberAddingFaled", "en")
                            + customException.getErrorCode() + " " + customException.getErrorMessage());
            memberOperationPojo.setErrorCode(customException.getErrorCode());
            memberOperationPojo.setResult(customException.getErrorMessage());
        } catch (Exception e) {
            LOGGER.log(Level.SEVERE,
                    resourceBundleMessageManager.getValueOfProperty(role + "_bulkMemberAddingFaled", "en")
                            + e.getMessage());
            memberOperationPojo.setErrorCode(ErrorCodes.ERROR_10.getErrorCode());
            memberOperationPojo.setResult(e.getMessage());
        }
        return memberOperationPojo;
    }

    private void addOneMember(Member member, String role, Logger LOGGER) throws MessagingException {
        MemberOperationPojo memberOperationPojo = new MemberOperationPojo();
        LOGGER.log(Level.INFO, resourceBundleMessageManager.getValueOfProperty(role + "_memberAddingMethod",
                member.getMemberLanguageCode()));
        member.setPassword(getHashedPassword(member.getPassword()));
        member.setEnabled(false);
        addMemberRolesObject(role, member);
        addActivationToken(member);
        memberFacade.create(member);
        // mailUtil.sendActivationMail(member.getEmail(), member.getActivationToken());
        memberOperationPojo.setResult(resourceBundleMessageManager.getValueOfProperty(role + "_memberAddingSuccessfull",
                member.getMemberLanguageCode()));
        LOGGER.log(Level.INFO, resourceBundleMessageManager.getValueOfProperty(role + "_memberAddingSuccessfull",
                member.getMemberLanguageCode()) + member);
    }

    private String getHashedPassword(String rawPassword) {
        return new BCryptPasswordEncoder().encode(rawPassword);
    }

    private void addMemberRolesObject(String role, Member member) {
        MemberRoles rolesOfMember = new MemberRoles();
        rolesOfMember.setRole(role);
        rolesOfMember.setEmail(member.getEmail());
        rolesOfMember.setMember(member);
        member.setRoleOfMember(rolesOfMember);
    }

    private void addActivationToken(Member member) {
        String activationToken = UUID.randomUUID().toString();
        member.setActivationToken(activationToken);

        LocalDateTime activationTokenExpDate = LocalDateTime.now().plusDays(1);
        // LocalDateTime activationTokenExpDate = LocalDateTime.now();//Use for expire
        // date test!
        member.setActivationTokenExpDate(activationTokenExpDate);
    }
}
package com.ilkaygunel.restservice;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

import com.ilkaygunel.entities.Member;
import com.ilkaygunel.pojo.MemberOperationPojo;
import com.ilkaygunel.service.MemberSaveService;

@RestController
@RequestMapping("/memberPostWebServiceEndPoint")
public class MemberSaveWebServiceEndPoint {
    @Autowired
    private MemberSaveService memberSaveService;

    @RequestMapping(value = "/saveUserMember", method = RequestMethod.POST)
    public ResponseEntity<MemberOperationPojo> saveUserMember(@RequestBody List<Member> memberList) {
        MemberOperationPojo memberOperationPojo = memberSaveService.addUserMember(memberList);
        return new ResponseEntity<MemberOperationPojo>(memberOperationPojo, HttpStatus.OK);
    }

    @RequestMapping(value = "/saveAdminMember", method = RequestMethod.POST)
    public ResponseEntity<MemberOperationPojo> saveAdminMember(@RequestBody List<Member> memberList) {
        MemberOperationPojo memberOperationPojo = memberSaveService.addAdminMember(memberList);
        return new ResponseEntity<MemberOperationPojo>(memberOperationPojo, HttpStatus.OK);
    }
}
package com.ilkaygunel.service;
导入java.time.LocalDateTime;
导入java.util.ArrayList;
导入java.util.List;
导入java.util.UUID;
导入java.util.logging.Level;
导入java.util.logging.Logger;
导入javax.mail.MessaginException;
导入org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
导入org.springframework.stereotype.Service;
导入com.ilkaygunel.constants.ConstantFields;
导入com.ilkaygunel.entities.Member;
导入com.ilkaygunel.entities.MemberRoles;
导入com.ilkaygunel.exception.CustomException;
导入com.ilkaygunel.exception.errorcode;
导入com.ilkaygunel.pojo.MemberOperationPojo;
@服务
公共类MemberSaveService扩展了BaseService{
公共成员操作POJO addUserMember(列表成员列表){
返回addBulkMember(memberList,ConstantFields.ROLE_USER.getConstantField());
}
公共成员操作POJO addAdminMember(列表成员列表){
返回addBulkMember(memberList,ConstantFields.ROLE_ADMIN.getConstantField());
}
公共成员操作POJO addBulkMember(列表成员列表,字符串角色){
Logger Logger=loggingUtil.GetLoggerFormMemberSaveding(this.getClass());
LOGGER.log(Level.INFO,resourceBundleMessageManager.getValueOfProperty(role+“\u bulkMemberAddingMethod”,“en”);
MemberOperationPojo MemberOperationPojo=新的MemberOperationPojo();
List savedMemberList=新建ArrayList();
试一试{
memberUtil.checkEmailAddressAndLanguageOnMemberList(memberList,LOGGER);
对于(成员:成员列表){
addOneMember(成员、角色、记录器);
savedMemberList.add(成员);
}
memberOperationPojo.setResult(
resourceBundleMessageManager.getValueOfProperty(角色+“\u bulkMemberAddingSuccessfull”,“en”);
memberOperationPojo.setMemberList(memberUtil.removeFieldsFromReturningMember(savedMemberList));
LOGGER.log(Level.INFO,
resourceBundleMessageManager.getValueOfProperty(角色+“\u bulkMemberAddingSuccessfull”,“en”)
+成员名单);
}捕获(自定义异常自定义异常){
LOGGER.log(严重级别,
resourceBundleMessageManager.getValueOfProperty(角色+“\u bulkMemberAddingFaled”,“en”)
+customException.getErrorCode()+“”+customException.getErrorMessage());
memberOperationPojo.setErrorCode(customException.getErrorCode());
memberOperationPojo.setResult(customException.getErrorMessage());
}捕获(例外e){
LOGGER.log(严重级别,
resourceBundleMessageManager.getValueOfProperty(角色+“\u bulkMemberAddingFaled”,“en”)
+e.getMessage());
memberOperationPojo.setErrorCode(ErrorCodes.ERROR_10.getErrorCode());
setResult(例如getMessage());
}
返回成员操作POJO;
}
私有void addOneMember(成员成员、字符串角色、记录器)引发MessaginException{
MemberOperationPojo MemberOperationPojo=新的MemberOperationPojo();
LOGGER.log(Level.INFO,resourceBundleMessageManager.getValueOfProperty(角色+“\u成员添加方法”,
getMemberLanguageCode());
setPassword(getHashedPassword(member.getPassword());
member.setEnabled(false);
AddMemberRoleObject(角色,成员);
addActivationToken(成员);
memberFacade.create(成员);
//mailUtil.sendActivationMail(member.getEmail(),member.getActivationToken());
memberOperationPojo.setResult(resourceBundleMessageManager.getValueOfProperty)(角色+“\u memberAddingSuccessfull”,
getMemberLanguageCode());
LOGGER.log(Level.INFO,resourceBundleMessageManager.getValueOfProperty)(角色+“\u memberAddingSuccessfull”,
getMemberLanguageCode())+member);
}
私有字符串getHashedPassword(字符串密码){
返回新的BCryptPasswordEncoder().encode(rawPassword);
}
私有void addMemberRoleObject(字符串角色,成员){
MemberRoles rolesOfMember=新成员角色();
rolesOfMember.setRole(角色);
rolesOfMember.setEmail(member.getEmail());
角色成员集合成员(成员);
成员:SetRoleOffMember(RoleOffMember);
}
私有void addActivationToken(成员){
字符串activationToken=UUID.randomUUID().toString();
成员:setActivationToken(activationToken);
LocalDateTime activationTokenExpDate=LocalDateTime.now().plusDays(1);
//LocalDateTime activationTokenExpDate=LocalDateTime.now();//用于过期
//日期测试!
成员.setActivationKenExpdate(ActivationKenExpdate);
}
}
我的Web服务端点类如下所示:

{
    "result": "Bulk user member saving is successfull. Members' informations are:",
    "memberList": [
        {
            "id": 2,
            "firstName": "Michael",
            "lastName": "Schumacher",
            "email": "ilkay.gune2l@kod5.org",
            "enabled": false,
            "memberLanguageCode": "tr",
            "roleOfMember": {
                "id": 0,
                "email": "ilkay.gune2l@kod5.org",
                "role": "ROLE_USER"
            }
        }
    ]
}
package com.ilkaygunel.service;

import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
import java.util.logging.Level;
import java.util.logging.Logger;

import javax.mail.MessagingException;

import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.stereotype.Service;

import com.ilkaygunel.constants.ConstantFields;
import com.ilkaygunel.entities.Member;
import com.ilkaygunel.entities.MemberRoles;
import com.ilkaygunel.exception.CustomException;
import com.ilkaygunel.exception.ErrorCodes;
import com.ilkaygunel.pojo.MemberOperationPojo;

@Service
public class MemberSaveService extends BaseService {

    public MemberOperationPojo addUserMember(List<Member> memberList) {
        return addBulkMember(memberList, ConstantFields.ROLE_USER.getConstantField());
    }

    public MemberOperationPojo addAdminMember(List<Member> memberList) {
        return addBulkMember(memberList, ConstantFields.ROLE_ADMIN.getConstantField());
    }

    public MemberOperationPojo addBulkMember(List<Member> memberList, String role) {
        Logger LOGGER = loggingUtil.getLoggerForMemberSaving(this.getClass());
        LOGGER.log(Level.INFO, resourceBundleMessageManager.getValueOfProperty(role + "_bulkMemberAddingMethod", "en"));
        MemberOperationPojo memberOperationPojo = new MemberOperationPojo();
        List<Member> savedMemberList = new ArrayList<>();
        try {
            memberUtil.checkEmailAddressAndLanguageOnMemberList(memberList, LOGGER);
            for (Member member : memberList) {
                addOneMember(member, role, LOGGER);
                savedMemberList.add(member);
            }
            memberOperationPojo.setResult(
                    resourceBundleMessageManager.getValueOfProperty(role + "_bulkMemberAddingSuccessfull", "en"));
            memberOperationPojo.setMemberList(memberUtil.removeFieldsFromReturningMember(savedMemberList));
            LOGGER.log(Level.INFO,
                    resourceBundleMessageManager.getValueOfProperty(role + "_bulkMemberAddingSuccessfull", "en")
                            + memberList);
        } catch (CustomException customException) {
            LOGGER.log(Level.SEVERE,
                    resourceBundleMessageManager.getValueOfProperty(role + "_bulkMemberAddingFaled", "en")
                            + customException.getErrorCode() + " " + customException.getErrorMessage());
            memberOperationPojo.setErrorCode(customException.getErrorCode());
            memberOperationPojo.setResult(customException.getErrorMessage());
        } catch (Exception e) {
            LOGGER.log(Level.SEVERE,
                    resourceBundleMessageManager.getValueOfProperty(role + "_bulkMemberAddingFaled", "en")
                            + e.getMessage());
            memberOperationPojo.setErrorCode(ErrorCodes.ERROR_10.getErrorCode());
            memberOperationPojo.setResult(e.getMessage());
        }
        return memberOperationPojo;
    }

    private void addOneMember(Member member, String role, Logger LOGGER) throws MessagingException {
        MemberOperationPojo memberOperationPojo = new MemberOperationPojo();
        LOGGER.log(Level.INFO, resourceBundleMessageManager.getValueOfProperty(role + "_memberAddingMethod",
                member.getMemberLanguageCode()));
        member.setPassword(getHashedPassword(member.getPassword()));
        member.setEnabled(false);
        addMemberRolesObject(role, member);
        addActivationToken(member);
        memberFacade.create(member);
        // mailUtil.sendActivationMail(member.getEmail(), member.getActivationToken());
        memberOperationPojo.setResult(resourceBundleMessageManager.getValueOfProperty(role + "_memberAddingSuccessfull",
                member.getMemberLanguageCode()));
        LOGGER.log(Level.INFO, resourceBundleMessageManager.getValueOfProperty(role + "_memberAddingSuccessfull",
                member.getMemberLanguageCode()) + member);
    }

    private String getHashedPassword(String rawPassword) {
        return new BCryptPasswordEncoder().encode(rawPassword);
    }

    private void addMemberRolesObject(String role, Member member) {
        MemberRoles rolesOfMember = new MemberRoles();
        rolesOfMember.setRole(role);
        rolesOfMember.setEmail(member.getEmail());
        rolesOfMember.setMember(member);
        member.setRoleOfMember(rolesOfMember);
    }

    private void addActivationToken(Member member) {
        String activationToken = UUID.randomUUID().toString();
        member.setActivationToken(activationToken);

        LocalDateTime activationTokenExpDate = LocalDateTime.now().plusDays(1);
        // LocalDateTime activationTokenExpDate = LocalDateTime.now();//Use for expire
        // date test!
        member.setActivationTokenExpDate(activationTokenExpDate);
    }
}
package com.ilkaygunel.restservice;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

import com.ilkaygunel.entities.Member;
import com.ilkaygunel.pojo.MemberOperationPojo;
import com.ilkaygunel.service.MemberSaveService;

@RestController
@RequestMapping("/memberPostWebServiceEndPoint")
public class MemberSaveWebServiceEndPoint {
    @Autowired
    private MemberSaveService memberSaveService;

    @RequestMapping(value = "/saveUserMember", method = RequestMethod.POST)
    public ResponseEntity<MemberOperationPojo> saveUserMember(@RequestBody List<Member> memberList) {
        MemberOperationPojo memberOperationPojo = memberSaveService.addUserMember(memberList);
        return new ResponseEntity<MemberOperationPojo>(memberOperationPojo, HttpStatus.OK);
    }

    @RequestMapping(value = "/saveAdminMember", method = RequestMethod.POST)
    public ResponseEntity<MemberOperationPojo> saveAdminMember(@RequestBody List<Member> memberList) {
        MemberOperationPojo memberOperationPojo = memberSaveService.addAdminMember(memberList);
        return new ResponseEntity<MemberOperationPojo>(memberOperationPojo, HttpStatus.OK);
    }
}
package com.ilkaygunel.restservice;
导入java.util.List;
导入org.springframework.beans.factory.annotation.Autowired;
导入org.springframework.http.HttpStatus;
导入org.springframework.http.ResponseEntity;
导入org.springframework.web.bind.annotation.RequestBody;
导入org.springframework.web.bind.annot