简体   繁体   中英

Spring data jpa How to filter the child objects of the result?

Spring data jpa How to filter the child objects of the result?

@Entity
public class Player {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;

private String name;

@OneToMany(mappedBy = "player")
private List<PlayerItem> playerItems;

public Integer getId() {
    return id;
}

public void setId(Integer id) {
    this.id = id;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public List<PlayerItem> getPlayerItems() {
    return playerItems;
}

public void setPlayerItems(List<PlayerItem> playerItems) {
    this.playerItems = playerItems;
}
}

@Entity
public class PlayerItem {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;

private String name;

private Boolean begin;

@ManyToOne
@JoinColumn(name = "play_id")
@JsonIgnore
private Player player;

public Integer getId() {
    return id;
}

public void setId(Integer id) {
    this.id = id;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public Boolean getBegin() {
    return begin;
}

public void setBegin(Boolean begin) {
    this.begin = begin;
}

public Player getPlayer() {
    return player;
}

public void setPlayer(Player player) {
    this.player = player;
}
}

public interface PlayerRepository extends JpaRepository<Player, Integer> {
List<Player> findByPlayerItemsName(String name);
}

@RestController
public class TestQcController {
@Resource
PlayerRepository repository;

@PostMapping("test")
public Object testQc() {
    List<Player> players = repository.findByPlayerItemsName("dada");
    return players;
}
}

JSON result

[{
    "id": 1,
    "name": "haha",
    "playerItems": [{
        "id": 1,
        "name": "dada",
        "begin": false
    }, {
        "id": 2,
        "name": "wawa",
        "begin": true
    }]
}]

Expected :

[{
    "id": 1,
    "name": "haha",
    "playerItems": [{
        "id": 1,
        "name": "dada",
        "begin": false
    }]
}]

actual:

[{
    "id": 1,
    "name": "haha",
    "playerItems": [{
        "id": 1,
        "name": "dada",
        "begin": false
    }, {
        "id": 2,
        "name": "wawa",
        "begin": true
    }]
}]

@OneToMany @Where(clause = "name='data'") private List<PlayerItem> dataPlayerItems;

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM