Reputation: 453
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
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
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