Lã Văn Thọ (
https://hibernate.atlassian.net/secure/ViewProfile.jspa?accountId=60d9710...
) *updated* an issue
Hibernate ORM (
https://hibernate.atlassian.net/browse/HHH?atlOrigin=eyJpIjoiZWM1MjU5ZWFk...
) / Bug (
https://hibernate.atlassian.net/browse/HHH-16484?atlOrigin=eyJpIjoiZWM1Mj...
) HHH-16484 (
https://hibernate.atlassian.net/browse/HHH-16484?atlOrigin=eyJpIjoiZWM1Mj...
) org.hibernate.UnknownEntityTypeException: Unable to locate entity descriptor:
com.game.data.core.entity.BaseEntity (
https://hibernate.atlassian.net/browse/HHH-16484?atlOrigin=eyJpIjoiZWM1Mj...
)
Change By: Lã Văn Thọ (
https://hibernate.atlassian.net/secure/ViewProfile.jspa?accountId=60d9710...
)
Hello Guys, I have three class : *BaseEntity, User, DaoCore*
{code:java}package com.game.data.core.entity;
import jakarta.persistence.*;
import lombok.Data;
import java.io.Serializable;
import java.time.LocalDateTime;
@MappedSuperclass
@Data
public abstract class BaseEntity implements Serializable {
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
protected Integer id; @Column(name = "created", nullable = false, updatable =
false)
protected LocalDateTime created; @Column(name = "updated", nullable = false)
protected LocalDateTime updated; public BaseEntity() {
this.created = LocalDateTime.now(); this.updated = LocalDateTime.now(); }
@PreUpdate
public void preUpdate() {
this.updated = LocalDateTime.now();
}
}{code}
*User* class :
{code:java}package com.game.data.core.entity;
import jakarta.persistence.Entity;
import lombok.Data;
@Entity
@Data
public class User extends BaseEntity {
private String username;
private String password;
}{code}
{ noformat code:java }// DaoCore Class
package com.game.data.core.dao;
import com.game.data.core.entity.BaseEntity;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface DaoCore<T extends BaseEntity,ID extends Integer> extends
JpaRepository<T,ID> {
}{ noformat code }
And AbstractServiceCRUD :
{ noformat code:java }package com.game.data.core.base;
import com.game.data.core.entity.BaseEntity;
import com.game.data.core.dao.DaoCore;
import jakarta.transaction.Transactional;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import java.util.ArrayDeque;
@Service
@Slf4j(topic = "AbstractServiceCRUD")
@Transactional(rollbackOn = RuntimeException.class)
@RequiredArgsConstructor
public class AbstractServiceCRUD<T extends BaseEntity, ID extends Integer>
implements ServiceCore<T, ID> {
private final DaoCore<T, ID> daoCore; @Override public T save(T bo) {
try {
log.info("saving data"); return daoCore.save(bo); } catch
(Exception e) {
log.error("error saving data", e); throw new
RuntimeException(e); }
}
@Override public T update(T bo, ID id) {
try {
if (!(id instanceof Integer)) {
log.info("id is not instance Integer"); return
null; }
boolean isExist = daoCore.existsById(id); if (isExist) {
log.info("updating data with id: {}",
id); bo.preUpdate(); return daoCore.save(bo); }
log.info("data with id: {} not found", id); return null; }
catch (Exception e) {
log.error("error updating data", e); throw new
RuntimeException(e); }
}
@Override public T delete(T bo) {
try {
ID id = (ID) bo.getId(); if (id != null) {
log.info("deleting data with id: {}",
id); daoCore.deleteById(id); return bo; }
log.info("data with id: {} not found", id); return null; }
catch (Exception e) {
log.error("error deleting data", e); throw new
RuntimeException(e); }
}
@Override public T findById(ID id) {
log.info("finding data with id: {}", id); T bo =
daoCore.findById(id).orElse(null); if (bo != null) {
log.info("data with id: {} found", id); return bo; }
return null; }
@Override public ArrayDeque<T> findAll() {
log.info("finding all data"); return new
ArrayDeque<>(daoCore.findAll()); }
@Override public Page<T> findAll(Pageable pageable) {
log.info("finding all data with page {} and size {}", pageable.getPageNumber(),
pageable.getPageSize()); return daoCore.findAll(pageable); }
}
{ noformat code }
And AbstractControllerCRUD :
{ noformat code:java }package com.game.data.core.base;
import com.game.data.core.entity.BaseEntity;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayDeque;
@RestController
@RequiredArgsConstructor
public class AbstractControllerCRUD<T extends BaseEntity, ID extends Integer>
implements ServiceCore<T, ID>{
@Autowired private AbstractServiceCRUD<T, ID>
abstractServiceCRUD; @PostMapping("/insert")
@Override public T save(@RequestBody T bo) {
return abstractServiceCRUD.save(bo); }
@PostMapping("/update/{id}")
@Override public T update( @RequestBody T bo,@PathVariable ID id) {
return abstractServiceCRUD.update(bo, id); }
@GetMapping("/delete/{id}")
@Override public T delete(@RequestBody T bo) {
return abstractServiceCRUD.delete(bo); }
@GetMapping("/find/{id}")
@Override public T findById(@PathVariable ID id) {
return abstractServiceCRUD.findById(id); }
@GetMapping("/findAll")
@Override public ArrayDeque<T> findAll() {
return abstractServiceCRUD.findAll(); }
@GetMapping("/findAllPage")
@Override public Page<T> findAll(@RequestBody Pageable pageable) {
return abstractServiceCRUD.findAll(pageable); }
}
{ noformat code }
And class : UserController
{ noformat code:java }package com.game.data.core.endpoint;
import com.game.data.core.base.AbstractControllerCRUD;
import com.game.data.core.entity.User;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController@RequestMapping("/api/user")
public class UserController extends AbstractControllerCRUD<User,Integer> {
}{ noformat code }
*When I call to api : /api/user/find/{id} it gives an error :*
{color:#bf2600}*org.hibernate.UnknownEntityTypeException: Unable to locate entity
descriptor: com.game.data.core.entity.BaseEntity* {color}
*If I call API /api/user/insert it still works, please help me, thanks*
(
https://hibernate.atlassian.net/browse/HHH-16484#add-comment?atlOrigin=ey...
) Add Comment (
https://hibernate.atlassian.net/browse/HHH-16484#add-comment?atlOrigin=ey...
)
Get Jira notifications on your phone! Download the Jira Cloud app for Android (
https://play.google.com/store/apps/details?id=com.atlassian.android.jira....
) or iOS (
https://itunes.apple.com/app/apple-store/id1006972087?pt=696495&ct=Em...
) This message was sent by Atlassian Jira (v1001.0.0-SNAPSHOT#100222- sha1:c08beee )