идентификаторы для этого класса должны быть назначены вручную перед вызовом save (); - PullRequest
0 голосов
/ 06 июня 2018

У меня есть пользовательский класс с полями Имя, Фамилия, Пол, Электронная почта, Пароль, DOB, Адрес и Роль.

@Entity
@Table(name="User_s180")
public class User {

@Id
private String Email;

@Column(nullable=false)
private String FirstName;

private String LastName;

@Column(nullable=false)
private String Gender;

@Column(nullable=false)
private String Mobile_Number;

@Column(nullable=false)
private Date DOB;

@Column(nullable=false)
private String Address; 

@Column(nullable=false)
private String Password;

@Column(nullable=false)
private String Role;

@Column(name="Online_status")
private boolean Online;

У меня есть методы получения и установки всех полей здесь

Я хочу создать электронную почту в качестве своего первичного ключа и, следовательно, у меня есть @Id. Но поскольку это строковый тип, я не могу использовать аннотацию @ Generation.Всякий раз, когда я пытаюсь вставить нового пользователя в Db, я получаю вложенное исключение ошибки org.hibernate.id.IdentifierGenerationException: идентификаторы для этого класса должны быть назначены вручную перед вызовом save (): com.niit.model.User] с первопричиной..

Код гибернации

package com.niit.Dao;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;

import com.niit.model.User;

@Repository
@Transactional
public class UserDaoImpl implements UserDao {
@Autowired
private SessionFactory sf;

public  UserDaoImpl()
{
    System.out.println("UserDaoImpl is Instantiated");
}

public void Registration(User user) {
    Session ssn=sf.getCurrentSession();
    ssn.save(user);
    }

public boolean isEmailUnique(String email) {
    // TODO Auto-generated method stub
    Session ssn=sf.getCurrentSession();
    Query query=ssn.createQuery("from User where email=:email");
    query.setString("email",email);
    User user=(User)query.uniqueResult();

    //User already exists
    if(user!=null)  
    {
    return  false;
    }
    else
    {
    return  true;
    } 

}

public User Login(User user) {
    // TODO Auto-generated method stub
    Session ssn=sf.getCurrentSession();
    Query query=ssn.createQuery("from User where email=:email and password=:password");
    query.setString("email",user.getEmail());
    query.setString("password", user.getPassword());
    User validuser=(User)query.uniqueResult();
    return validuser;

}

public void UpdateUserOnlineStatus(User user) {
    // TODO Auto-generated method stub
    Session ssn=sf.getCurrentSession();
    ssn.update(user);

}

}

Класс контроллера

package com.niit.controllers;


import javax.servlet.http.HttpSession;

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

import com.niit.Dao.UserDao;
import com.niit.model.Errorclass;
import com.niit.model.User;

@Controller
public class UserController {
@Autowired
private UserDao userdao;


public UserController(){
    System.out.println("UserController is instantiated");
}

@RequestMapping(value="/Signupuser",method=RequestMethod.POST)
public ResponseEntity<?> Registration(@RequestBody User user){
System.out.println("Registration function invoked");

    if(userdao.isEmailUnique(user.getEmail()))
    {  
        System.out.println("Email is Unique --> Registering User");
        userdao.Registration(user);
        System.out.println("User Registered Successfully");
        return new ResponseEntity<User>(user,HttpStatus.OK);
    }
    else
    {   
        System.out.println("Email is not Unique --> User cannot be Registered");
        Errorclass ec=new Errorclass(10,"Email-id already exists");
        return new ResponseEntity<Errorclass>(ec,HttpStatus.CONFLICT);
    }

}

1 Ответ

0 голосов
/ 06 июня 2018

if (userdao.isEmailUnique (user.getEmail ())) недостаточно, чтобы убедиться, что вы получили действительный адрес электронной почты в запросе.Если адрес электронной почты пуст, ваш запрос будет переведен как «от пользователя, где email = пусто».

Попробуйте напечатать класс User в методе UserDaoImpl.Registration и убедитесь, что у вас есть адрес электронной почты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...