在下面的场景中,如何从hibernate单表策略中的列表生成Java8中的映射

在下面的场景中,如何从hibernate单表策略中的列表生成Java8中的映射,java,hibernate,single-table-inheritance,Java,Hibernate,Single Table Inheritance,} 在这里,我试图一次召集所有队员 @Entity @Table(name="PLAYER") @Inheritance(strategy=InheritanceType.SINGLE_TABLE) @DiscriminatorColumn( name="TEAM", discriminatorType=DiscriminatorType.STRING ) public abstract class Player{ @Id

}

在这里,我试图一次召集所有队员

@Entity
@Table(name="PLAYER")
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(
          name="TEAM", 
          discriminatorType=DiscriminatorType.STRING
          )
public abstract class Player{
    @Id
    @Column(name="ID")
    @GeneratedValue(generator = "seq_gen")
    @SequenceGenerator(name = "seq_gen", sequenceName = "CONSTANTS_SEQ")
    protected long id;
    @Column(name="NAME")
    protected String name;
    @Column(name="YEAR")
    protected int year; 
}

@Entity
@DiscriminatorValue(value = "SUNRISERS")
public class SunRisersPlayer extends Player{

}

@Entity
@DiscriminatorValue(value = "KNIGHT_RIDERS")
public class KnightRidersPlayer extends Player{

}

@Entity
@DiscriminatorValue(value = "DARE_DEVILS")
public class DareDevilsPlayer extends Player{

一旦我得到了完整的列表,如何在Java8中准备一张地图,其中键是团队名称,值是对应于该团队的球员列表

我能够使用groupBy获得完整的列表,如下所示

在玩家实体中定义了一个临时变量以获取团队名称

ID      name        year    team
1000    gilchrist   2015    SUNRISERS
1001    Yuvraj      2015    SUNRISERS
1002    Ghambir     2015    KNIGHT_RIDERS
1004    Pathan      2015    KNIGHT_RIDERS
1006    Umesh       2015    KNIGHT_RIDERS
1007    Zaheer      2015    DARE_DEVILS
1008    Venu        2015    DARE_DEVILS
通过使用团队名称,我按如下所示进行分组,以获得每个团队的球员(
Map

List players=playerDaoImpl.findAll();
Map playersPerTeam=players.stream()
.collect(Collectors.groupingBy(Player::getName));

不要使用继承。使用单个TeamPlayer实体(使用单数形式,顺便说一句,而不是复数形式),并将名为team的字段添加到此实体。谢谢,将其更改为单数形式,我尝试在本例中使用单表继承示例。如果子类没有任何附加字段,为什么要使用继承,也没有任何不同的行为?我试图使用hibernate功能。我觉得这个适合这个地方。那么,在哪种情况下我们可以使用这种继承映射呢?当继承有意义时,即当您有两个实体,具有is-a关联,并且子实体的行为与基本实体不同,并且具有额外的持久属性时。
ID      name        year    team
1000    gilchrist   2015    SUNRISERS
1001    Yuvraj      2015    SUNRISERS
1002    Ghambir     2015    KNIGHT_RIDERS
1004    Pathan      2015    KNIGHT_RIDERS
1006    Umesh       2015    KNIGHT_RIDERS
1007    Zaheer      2015    DARE_DEVILS
1008    Venu        2015    DARE_DEVILS
@Transient
public String getName(){
    DiscriminatorValue val = this.getClass().getAnnotation( DiscriminatorValue.class );
    return val == null ? null : StringUtils.remove(WordUtils.capitalizeFully(val.value(), '_'), "_");
}
List<Player> players = playerDaoImpl.findAll();
Map<String, List<Player>> playersPerTeam= players.stream()
              .collect(Collectors.groupingBy(Player::getName));