Home Java JPA extending entity
Reply: 1

Java JPA extending entity

Helosze
1#
Helosze Published in 2018-02-12 13:26:08Z

I have an Attachment class:

@Entity
@Table(name = "ATTACHMENT")
public class Attachment implements Serializable {

@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "seq_gen")
@SequenceGenerator(name = "seq_gen", sequenceName = "attachment_seq", allocationSize = 1)
@Column(name = "ATTACHMENT_ID", nullable = false)
private Long id;

@ManyToOne
@JoinColumn(name = "CREATED_BY", nullable = false)
private User createdBy;

@Column(name = "FILE_NAME", nullable = false)
private String fileName;

@Column(name = "CONTENT_TYPE", length = 100, nullable = false)
private String contentType;

@Temporal(TemporalType.TIMESTAMP)
@Column(name = "CREATE_DATE", nullable = false)
private Date createDate;

and I want to extend this class with one additional field (which is on this table too):

@Entity
public class AttachmentWithContent extends Attachment {

@Column(name = "FILE_CONTENT")
@Lob
private byte[] fileContent;

And then I want to query that using JpaRepository:

 List<AttachmentWithContent> findByIdIn(List<Long> attachmentsIds);

but there's an error

'Attachment' domain type or valid projection interface expected here.

I need to be able to query Attachment class one time, and AttachmentWithContent another time.

I've tried with @Inheritance and @MappedSuperClass, but it doesn't work.

gybandi
2#
gybandi Reply to 2018-02-12 20:28:52Z

I think that message is only a warning by your IDE (I assume you use IntelliJ), because it deduces by the method name and repository type that you should return with a list of Attachment objects for that query. I tried the entity model you described with a sample spring boot project and it works for me. However, if you have an AttachmentRepository like this:

public interface AttachmentRepository implements JpaRepository<Attachment,Long>{
   List<AttachmentWithContent> findByIdIn(List<Long> attachmentsIds);
}

the findByIdIn method in this will only find the AttachmentWithContent entities; if you input an id that belongs to a simple Attachment, it will yield an empty result. If you change the return type to Attachment (as the warning suggests) it will return all Attachments with or without content:

public interface AttachmentRepository implements JpaRepository<Attachment,Long>{
   List<Attachment> findByIdIn(List<Long> attachmentsIds);
}
You need to login account before you can post.

About| Privacy statement| Terms of Service| Advertising| Contact us| Help| Sitemap|
Processed in 0.315159 second(s) , Gzip On .

© 2016 Powered by mzan.com design MATCHINFO