I have the next data model:
@Entity
@Table(name = Tables.USERS, catalog = Database.NAME)
public class User implements Serializable {
private static final long serialVersionUID = -8190974017668449062L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = Tables.Users.ID, nullable = false)
@Type(type="pg-uuid")
private UUID mId;
@Column(name = Tables.Users.FIRST_NAME, nullable = false)
private String mFirstName;
@Column(name = Tables.Users.LAST_NAME, nullable = false)
private String mLastName;
@Column(name = Tables.Users.EMAIL, nullable = false)
private String mEmail;
@Column(name = Tables.Users.BIRTHDATE, nullable = false)
@Type(type="date")
private Date mBirthdate;
@Column(name = Tables.Users.SEX, nullable = false)
@Enumerated(EnumType.STRING)
private Sex mSex;
@Column(name = Tables.Users.HASH, nullable = false, length = 32)
private String mHash;
@Column(name = Tables.Users.SALT, nullable = false, length = 20)
private String mSalt;
public UUID getId() {
return mId;
}
public User setId(final UUID id) {
mId = id;
return this;
}
public String getFirstName() {
return mFirstName;
}
public User setFirstName(final String firstName) {
mFirstName = firstName;
return this;
}
public String getLastName() {
return mLastName;
}
public User setLastName(final String lastName) {
mLastName = lastName;
return this;
}
public String getEmail() {
return mEmail;
}
public User setEmail(final String email) {
mEmail = email;
return this;
}
public Date getBirthdate() {
return mBirthdate;
}
public User setBirthdate(Date birthdate) {
mBirthdate = birthdate;
return this;
}
public Sex getSex() {
return mSex;
}
public User setSex(Sex sex) {
mSex = sex;
return this;
}
public String getHash() {
return mHash;
}
public User setHash(String hash) {
mHash = hash;
return this;
}
public String getSalt() {
return mSalt;
}
public User setSalt(String salt) {
mSalt = salt;
return this;
}
}
My EntityManager is:
@Service
public class UserManager implements IUserManager {
private static final int PAGE_SIZE = 10;
@Autowired
private UserDAO mDAO;
@Override
public List<User> getAllUsers() {
return mDAO.getAllUsers();
}
@Override
public List<User> getUsers(int pageNumber) {
return mDAO.getUsers(pageNumber, PAGE_SIZE);
}
@Override
public User getUserByEmail(String email) {
return mDAO.getUserByEmail(email);
}
@Override
public User getUserById(UUID id) {
return mDAO.getUserById(id);
}
@Override
public boolean hasEmail(String email) {
return mDAO.getUserByEmail(email) != null;
}
@Override
public boolean add(User user) {
return mDAO.add(user);
}
}
And my DAO:
@Repository
public class UserDAO implements IUserDAO {
@PersistenceContext
private EntityManager mEntityManager;
@Override
public List<User> getAllUsers() {
CriteriaBuilder builder = mEntityManager.getCriteriaBuilder();
CriteriaQuery<User> cq = builder.createQuery(User.class);
Root<User> root = cq.from(User.class);
cq.select(root);
TypedQuery<User> tq = mEntityManager.createQuery(cq);
return tq.getResultList();
}
@Override
public List<User> getUsers(int pageNumber, int pageSize) {
try {
CriteriaBuilder builder = mEntityManager.getCriteriaBuilder();
CriteriaQuery<User> cq = builder.createQuery(User.class);
Root<User> root = cq.from(User.class);
cq.select(root);
TypedQuery<User> tq = mEntityManager.createQuery(cq);
tq.setMaxResults(pageSize);
tq.setFirstResult((pageNumber - 1) * pageSize);
return tq.getResultList();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
@Override
public User getUserByEmail(String email) {
try {
CriteriaBuilder builder = mEntityManager.getCriteriaBuilder();
CriteriaQuery<User> cq = builder.createQuery(User.class);
Root<User> root = cq.from(User.class);
cq.where(builder.equal(root.get(Tables.Users.EMAIL), email));
cq.select(root);
TypedQuery<User> tq = mEntityManager.createQuery(cq);
return tq.getSingleResult();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
@Override
public User getUserById(UUID id) {
CriteriaBuilder builder = mEntityManager.getCriteriaBuilder();
CriteriaQuery<User> cq = builder.createQuery(User.class);
Root<User> root = cq.from(User.class);
cq.where(builder.equal(root.get(Tables.Users.ID), id));
cq.select(root);
TypedQuery<User> tq = mEntityManager.createQuery(cq);
return tq.getSingleResult();
}
@Override
public boolean add(User user) {
try {
EntityTransaction transaction = mEntityManager.getTransaction();
transaction.begin();
mEntityManager.persist(user);
transaction.commit();
return true;
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
}
When I'm trying to add a new user to the database in my controller:
@RequestMapping("users")
@RestController
public class UserController {
@Autowired
private UserManager mUserManager;
@PostMapping(value = "new")
public ResponseEntity<UserModel> register(@RequestBody NewUserModel newUser) {
User user = UserUtils.toUser(mUserManager, newUser);
user.setId(UUID.randomUUID());
if (!mUserManager.add(user)) {
throw new InternalServerException(ServerError.INTERNAL);
}
UserModel userModel = new UserModel(user);
return new ResponseEntity<>(userModel, HttpStatus.OK);
}
}
My UserManager returns false though User object is correct. But I have checked it in the debug mode, my manager didn't call even add() method from UserDAO, instead of it the control was moved to CglibAopProxy in the method intercept... It goes through this method body and after I am getting false return in UserManager... I got a nothing just...
Where can I find an error? I haven't ideas even.