iChrome
iChrome

Reputation: 453

org.hibernate.UnknownEntityTypeException: Unable to locate persister: com.mycompany.model.NodeElement

I have base mapping class which contains some common fields

@MappedSuperclass
@Data
public class NodeElement {
    @Id
    private String id;

    @OneToOne(cascade = CascadeType.ALL)
    @PrimaryKeyJoinColumn
    private ElementPosition elementPosition;
}

And i have few classes which extends from this NodeElement class

@Data
@Entity(name = "node")
@Table(name = "NODE")
public class Node extends NodeElement {
    @ManyToOne(cascade = {CascadeType.ALL})
    @JoinColumn(name = "PARENT_NODE_ID")
    private Node parentNode;

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

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

    @OneToMany(mappedBy = "node", cascade = CascadeType.ALL, orphanRemoval = true)
    private List<NodeButton> nodeButtons;

    @OneToMany(mappedBy = "node", cascade = CascadeType.ALL, orphanRemoval = true)
    private List<NodeAsset> nodeAssets;
}

For CRUD operations i'm using spring-data repository:

public interface NodeElementRepository extends CrudRepository<NodeElement, String> {
}

And it's working perfectly fine for saving entities:

NodeElement nodeModel = elementConverter.convert(nodeElement);
this.nodeElementRepository.save(nodeModel);

But when i try to find entity by Id

Optional<NodeElement> node = this.nodeElementRepository.findById(nodeModel.getId());

i get following error:

 org.hibernate.UnknownEntityTypeException: Unable to locate persister: by.com.lifetech.lifeEmployeeBot.model.NodeElement

Is it possible to get entity by using base repository? Or do i have to use specific one(NodeRepository instead of NodeElementRepository)?

Upvotes: 2

Views: 2545

Answers (2)

iChrome
iChrome

Reputation: 453

I changed mapping of my NodeElement class:

@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
@Entity
@Data
public class NodeElement {
    @Id
    private String id;

    @OneToOne(cascade = CascadeType.ALL)
    @PrimaryKeyJoinColumn
    private ElementPosition elementPosition;
}

And after that i'm able to get entity by id by using NodeElementRepository class

Upvotes: 2

Karol Katanowski
Karol Katanowski

Reputation: 186

Try to change String for Long in

public interface NodeElementRepository extends CrudRepository

If that doesnt work try to write Repository that extending JpaRepository

@Repository //remember about this!
public interface NodeElementRepository extends JpaRepository<NodeElement, Long> {
}

Also try method

.findOne(id) 

Upvotes: 0

Related Questions