시스템에서 복합 패턴을 구현하고 사용하려고합니다.복합 패턴, 백엔드에서 모든 엔티티를 검색 할 수 없습니다.
문제는 내가 백엔드에서 엔티티의 모든 계층 구조를 검색 할 수 없다는 것입니다.
무엇이 문제인지 모르겠지만 가져 오기는 좋습니다. 그래서 나는 최대 절전 모드인지 확신 할 수 없다.
본인은 내 단체입니다. 이 클래스에서
@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에서 모든 계층 구조 객체를 볼 수 있습니다. 문제가 무엇인지 잘 모르겠습니다.
읽어 주셔서 감사합니다.