在下面的场景中,如何从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));