如果我的Entity有一个字段,它是接口类型的集合,我如何告诉spring数据根据正确的具体类型来水合集合中的每个项目?有没有什么方法可以让spring示例化一个Song类的自定义Map,例如,如果有一些从neo4j返回的数据,唯一地将记录标识为Song类(Song类实现MusicItem)?我下面的musicItems集合应该有多个条目,所有条目都有具体的MusicItem类型。
实体
public class Dater implements CSVFormat{
@Id
private String userId;
@Relationship(type = "LISTENS_TO")
private Set<MusicItem> musicItems = new HashSet<>();
约会者听过的音乐的MusicItem界面
public interface MusicItem{
String getName();
MusicItemType getType();
}
从db返回的MusicItem的示例实现
public class Song implements MusicItem{
@Id
@GeneratedValue
private Long id;
}
存储库查询
public interface DaterRepository extends Neo4jRepository<Dater,String>{
@Query("MATCH (user:Dater { userId: $userId })-[:LISTENS_TO]->(musicItems)<-[mr:LISTENS_TO]-(matches:Dater) "
+ "where id(user) <> id(matches) "
+ "RETURN matches, collect(mr), collect(musicItems) ")
List<Dater> getMatches(String userId);
db中的示例数据
{
"identity": 2912,
"labels": [
"MusicItem",
"Song"
],
"properties": {
"name": "Youth",
"isrc": "QM6P41904468",
"smallImageUrl": "https://is4-ssl.mzstatic.com/image/thumb/Music123/v4/3e/29/f8/3e29f87e-239e-d85d-f30e-b93689e863ec/194491036614.jpg/75x75bb.jpg",
"mediumImageUrl": "https://is4-ssl.mzstatic.com/image/thumb/Music123/v4/3e/29/f8/3e29f87e-239e-d85d-f30e-b93689e863ec/194491036614.jpg/320x320bb.jpg",
"largeImageUrl": "https://is4-ssl.mzstatic.com/image/thumb/Music123/v4/3e/29/f8/3e29f87e-239e-d85d-f30e-b93689e863ec/194491036614.jpg/640x640bb.jpg"
}
}
1条答案
按热度按时间yyyllmsg1#
如果我理解正确的话,我对Java版本数据做了类似的事情,其中我们有不同类型的子增量。一位同事向我展示了如何创建一个抽象的Delta类,其他几个类扩展了这个类。重写的toString方法应该给予子类的类型。https://github.com/JMHReif/sdn-jdk-versions/blob/gerrits-playground/src/main/java/com/jmhreif/sdnjdkversions/domain/Delta.java