【发布时间】:2017-02-19 11:28:46
【问题描述】:
是否可以通过 SubTypes 和 Spring Data REST 定义不同的 Projections 使用关于类类型的最具体的投影?
此问题已在 JIRA 问题 DATAREST-739 上公开,并且还存在合并提交,但这未出现在官方 changelog 上,而且我没有找到任何文档或指南来解决当前版本的问题。
用于问题的用例示例是:
@Entity
@Inheritance(strategy=InheritanceType.JOINED)
@DiscriminatorColumn(name="type")
@JsonTypeInfo(use=JsonTypeInfo.Id.NAME, include=JsonTypeInfo.As.PROPERTY, property="type")
public abstract class Message implements Identifiable<UUID> { ... }
@Entity
@DiscriminatorValue("TEXT")
@JsonTypeName("TEXT")
public class TextMessage extends Message { ... }
@Entity
@DiscriminatorValue("TODO")
@JsonTypeName("TODO")
public class TodoMessage extends Message { Boolean isDone; }
@Projection(name = "summary", types = TodoMessage.class)
public class TodoMessageSummary { Boolean getIsDone(); }
@Projection(name = "summary", types = TextMessage.class)
public class TextMessageSummary { ... }
public interface MessageRepo extends JpaRepository<Message, UUID> { ... }
@RepositoryRestResource(excerptProjection = TodoMessageSummary.class)
public interface TodoMessageRepo extends JpaRepository<Message, UUID> { ... }
@RepositoryRestResource(excerptProjection = TextMessageSummary.class)
public interface TextMessageRepo extends JpaRepository<TextMessage, UUID> { ... }
第一个问题:如何为 MessageRepo 定义一个摘录投影,以便将 TodoMessageSummary 用于 TodoMessage 实体和 TextMessageSummary 用于 TextMessage?
第二个问题:如何为另一个具有 Message 字段的实体定义投影?假设您有以下内容:
@Projection(name = "summary", types = Dashboard.class)
public class DashboardSummary {
List<Message> getMessages();
}
已解决:
【问题讨论】:
标签: java spring inheritance spring-data spring-data-rest