0

This is Controller Code

    @PutMapping
    @PreAuthorize("hasRole('USER')")
    @RequestMapping("/update")
    public ResponseEntity<?> userUpdate(MemberDto memberDto){
        memberService.userUpdate(memberDto);
        return new ResponseEntity<>("ok", HttpStatus.OK);
    }

This is my Member Class code

@Entity
@Getter
@Setter
@Table(name = "member")
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class Member {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(name = "name")
    private String name;

    private String email;

    private String password;

    private String providerId;

    @Enumerated(EnumType.STRING)
    private MemberRole role;

    @Enumerated(EnumType.STRING)
    private AuthProvider authProvider;

    private String imageUrl;

    //μΆ”κ°€

    private String phoneNumber;

    @CreationTimestamp
    private LocalDateTime createTime;

    @UpdateTimestamp
    private LocalDateTime updateTime;


   
    @JsonIgnore
    @OneToMany(mappedBy = "member")
    private List<Post> posts = new ArrayList<>();

    @JsonIgnore
    @OneToMany(mappedBy = "member")
    private List<Save> save = new ArrayList<>();

//    @JsonIgnore
//    @OneToMany(mappedBy = "member")
//    private List<Follow> follow = new ArrayList<>();

    @JsonIgnore
    @OneToMany(mappedBy = "member")
    private List<Image> image = new ArrayList<>();

}

This is DTO code

@Data
@NoArgsConstructor
public class MemberDto {

    private Long id;

    private String email;

    private String password;

    private String name;

    private String phoneNumber;

    @QueryProjection
    public MemberDto(Long id, String email, String password, String name, String phoneNumber){
        this.id = id;
        this.email = email;
        this.password=password;
        this.name = name;
        this.phoneNumber = phoneNumber;
    }
}

This is Service Code

@RequiredArgsConstructor
@Service
public class MemberService {

    @Autowired
    private MemberRepository memberRepository;

    public void userUpdate(MemberDto updateValue)  {
        memberRepository.updateMember(updateValue);
    }
}

This is Repository(impl) code


@RequiredArgsConstructor
public class MemberRepositoryImpl implements MemberRepositoryCustom {

    private final EntityManager em;
    private final JPAQueryFactory queryFactory;

    @Override
    public void updateMember(MemberDto memberDto){
       QMember qMember = QMember.member;
        queryFactory.update(qMember)
                .where(qMember.id.eq(memberDto.getId()))
                .set(qMember.email, memberDto.getEmail())
                .set(qMember.password, memberDto.getPassword())
                .set(qMember.name, memberDto.getName())
                .set(qMember.phoneNumber, memberDto.getPhoneNumber())
                .execute();
    }
}

And This is my frontend (react)code send as json

{id: 7, name: '111', email: '111@111.com1', password: '12313', phonenumber: '123123'}
email: "111@111.com1"
id: 7
name: "111"
password: "12313"
phonenumber: "123123"

I try to update myDB use member ID As you can see use querydsl with

.where(qMember.id.eq(memberDto.getId()))

This code in Repository class

so I expecte nativequery like

email: "111@111.com1" id: 7 name: "111" password: "12313" phonenumber: "123123"

update member(tablename) set name = 111, password = 123123, ..... where id = 7

But querydsl throw Error

java.lang.IllegalArgumentException: eq(null) is not allowed. Use isNull() instead

I Think my code is something wrong but I can't find it.

And also chrome console throw error

error: "Internal Server Error"
path: "/user/update"
status: 500
timestamp: "2021-10-12T21:04:00.658+00:00"

Internal server error so I confident that my backend Code is wrong

please help me

JB P
  • 86
  • 1
  • 10

0 Answers0