2017-04-18 1 views
0

J'essaie de mettre en œuvre et d'utiliser le modèle composite dans mon système.modèle composite, je ne suis pas en mesure de récupérer toutes les entités du backend

Le problème est que je ne peux pas récupérer toute la hiérarchie des entités du backend.

Je ne sais pas quel est le problème, le fetch est bien. Donc, je ne suis pas sûr si c'est hiberner.

Voyons, ce sont mes entités.

@Entity 
@Table(name = "game") 
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) 
@Document(indexName = "game") 
public class Game extends AbstractAuditingEntity implements Serializable { 

private static final long serialVersionUID = 1L; 

@Id 
@GeneratedValue(strategy = GenerationType.AUTO) 
private Long id; 

@NotNull 
@Column(name = "name", nullable = false) 
private String name; 

@Column(name = "detail") 
private String detail; 

@OneToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL) 
@JoinColumn(name = "rule_id") 
private GameRule gameRule; 
... 

Dans cette classe, je sauvegarde la principale « règle de jeu »

@Entity 
@Table(name = "game_rule") 
@Inheritance(strategy = InheritanceType.SINGLE_TABLE) 
@DiscriminatorColumn(name = "type", discriminatorType = DiscriminatorType.STRING) 
@DiscriminatorValue("rule") 
@JsonTypeInfo(
    use = JsonTypeInfo.Id.NAME, 
    include = JsonTypeInfo.As.PROPERTY, 
    property = "_class") 
@JsonSubTypes({ 
    @JsonSubTypes.Type(value = SimpleRule.class, name = "SimpleRule"), 
    @JsonSubTypes.Type(value = CompositeRule.class, name = "CompositeRule") }) 
public abstract class GameRule implements Serializable { 
private static final long serialVersionUID = -4597791997254248990L; 

@Id 
@GeneratedValue(strategy = GenerationType.AUTO) 
@Column(name = "id", nullable = false) 
private Long id; 
private String operator; 

Dans cette classe enregistrer une liste des règles de jeu

@Entity 
@Inheritance(strategy = InheritanceType.SINGLE_TABLE) 
@DiscriminatorColumn(discriminatorType = DiscriminatorType.STRING) 
@DiscriminatorValue("group") 
public class CompositeRule extends GameRule { 
private static final long serialVersionUID = 6197786758476721324L; 
@ManyToMany(fetch = FetchType.EAGER, cascade = { CascadeType.ALL }) 
@JoinTable(name = "game_rules_hierarchy", 
     joinColumns = @JoinColumn(name = "parent_rule_id", referencedColumnName = "id"), 
     inverseJoinColumns = @JoinColumn(name = "child_rule_id", referencedColumnName = "id")) 
@OrderBy("id") 
private List<GameRule> rules; 

public List<GameRule> getRules() { return rules; } 

public void setRules(List<GameRule> rules) { this.rules = rules; } 

Et maintenant l'entité feuille.

@Entity 
@Inheritance(strategy = InheritanceType.SINGLE_TABLE) 
@DiscriminatorColumn(discriminatorType = DiscriminatorType.STRING) 
@DiscriminatorValue("simple") 
public class SimpleRule extends GameRule { 
private static final long serialVersionUID = 6197786758476721324L; 

private String variable; 
private Double value; 

@ManyToOne 
@NotNull 
private Device device; 

Maintenant, le restController pour récupérer les données

@RequestMapping(value = "/games/{id}", 
     method = RequestMethod.GET, 
     produces = MediaType.APPLICATION_JSON_VALUE) 
@Timed 
@Transactional 
public ResponseEntity<Game> getGame(@PathVariable Long id) { 
    log.debug("REST request to get Game : {}", id); 
    Game game = gameRepository.findOne(id); 

    return Optional.ofNullable(game) 
      .map(result -> new ResponseEntity<>(
       result, 
       HttpStatus.OK)) 
      .orElse(new ResponseEntity<>(HttpStatus.NOT_FOUND)); 
    } 

maintenant dans la vue, je suis en mesure de recevoir les objets CompositeRule mais rien sur les objets simpleRule. Depuis l'interface utilisateur (angulaire), j'utilise ce JSON pour charger la hiérarchie.

vm.game.gameRule = {id: null, operator: "", type:null, _class:"CompositeRule", 
      rules: [ {id: null, operator: "", type:null, _class:"CompositeRule", rules: 
       [{id: null, type:null, _class:"SimpleRule", device: "6", variable: "POWER", operator: ">", value: "100"}, 
        {id: null, type:null, _class:"SimpleRule", device: "6", variable: "POWER", operator: ">", value: "100"}]} 
      ]}; 

Ceci est chargé avec succès dans le DB. Mais le problème est quand j'essaie de récupérer toute la hiérarchie. À l'heure actuelle, je reçois seulement les objets CompositeRule, somthing comme:

vm.game.gameRule = {id: 1, operator: "", type:null, _class:"CompositeRule", 
      rules: [ {id: 2, operator: "", type:null, _class:"CompositeRule", rules:[]} ]};] 

Dans le RestController je suis en mesure de voir tous les objets de hiérarchie. Je ne suis pas sûr du problème.

Merci d'avoir lu.

Répondre

0

MON MAUVAIS!

Tout allait bien. Mon problème est dans les journaux de la console. Il semble que la console en chrome ne montre pas toute la hiérarchie. Mais si je vais à la vue du réseau, je suis capable de tout voir.

Merci.