2017-04-18 21 views
0

시스템에서 복합 패턴을 구현하고 사용하려고합니다.복합 패턴, 백엔드에서 모든 엔티티를 검색 할 수 없습니다.

문제는 내가 백엔드에서 엔티티의 모든 계층 구조를 검색 할 수 없다는 것입니다.

무엇이 문제인지 모르겠지만 가져 오기는 좋습니다. 그래서 나는 최대 절전 모드인지 확신 할 수 없다.

본인은 내 단체입니다. 이 클래스에서

@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; 
... 

는 내가 지금
@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; } 

GameRules

의 목록과 잎 개체를 저장이 클래스에서 메인 "GameRule"

@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; 

을 저장합니다.

@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; 

이제 restController 지금보기에 나는 simpleRule 개체에 대한 CompositeRule 오브젝트만을 수신 할 수 있어요 데이터

@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)); 
    } 

를 검색 할 수 있습니다.

UI (각도)에서이 JSON을 사용하여 계층을로드하고 있습니다.

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"}]} 
      ]}; 

이것은 데이터베이스에 성공적으로로드되었습니다. 그러나 문제는 전체 계층 구조를 검색하려고 할 때입니다. 현재 다음과 같은 CompositeRule 객체 만 수신 중입니다.

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

RestController에서 모든 계층 구조 객체를 볼 수 있습니다. 문제가 무엇인지 잘 모르겠습니다.

읽어 주셔서 감사합니다.

답변

0

MY BAD!

모든 것이 좋았습니다. 내 문제는 콘솔 로그에 있습니다. 크롬의 콘솔이 모든 계층 구조를 표시하지 않는 것 같습니다. 그러나 네트워크보기로 가면 모든 것을 볼 수 있습니다.

감사합니다.