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.