Я пытаюсь найти лучший способ реализовать вычисляемое свойство, которое запрашивает последнее сообщение в сущности чата.
Сущность сообщения реализована как иерархия классов в соответствии с типом сообщения (Изображение, Текст, URL ...)
@Entity
@Table(name = MessageEntity.TABLE_NAME)
@Inheritance(strategy = InheritanceType.JOINED)
@DiscriminatorColumn(name = "Type", discriminatorType = DiscriminatorType.STRING)
@NamedEntityGraphs({
@NamedEntityGraph(name = MessageEntity.GRAPH_MESSAGES_FULL, attributeNodes = {
@NamedAttributeNode(value = "creator", subgraph = UserEntity.GRAPH_USER_BASIC),
@NamedAttributeNode(value = "chat")
})
})
@Getter
@Setter
public abstract class MessageEntity extends AbstractEntity
Пример MessageImageEntity
@Entity
@Table(name = MessageImageEntity.TABLE_NAME)
@DiscriminatorValue("IMAGE")
@Data
@Builder
@EqualsAndHashCode(callSuper = false)
@AllArgsConstructor
@NoArgsConstructor
public class MessageImageEntity extends MessageEntity
Поэтому я реализовал следующее свойство JoinFormula для получения последнего сообщения в чат, но полученный объект сообщения делает не относится к определенной c реализации
@ManyToOne(fetch = FetchType.LAZY)
@JoinFormula("("
+ "SELECT M.Messages_id "
+ "FROM Messages M "
+ "LEFT OUTER JOIN Messages_Image MI ON M.Messages_id = MI.Messages_id "
+ "LEFT OUTER JOIN Messages_Text MT ON M.Messages_id = MT.Messages_id "
+ "LEFT OUTER JOIN Messages_Url MU ON M.Messages_id = MU.Messages_id "
+ "WHERE M.Chat_id = Chats_id "
+ "ORDER BY M.Created_at DESC "
+ "LIMIT 1"
+ ")")
protected MessageEntity lastMessage;
Кто-нибудь знает, как я могу выполнить этот запрос? Спасибо, Привет