1

次のJPAエンティティがあります-ルールと戦略。ルールを更新すると、ストラテジーの lastModified 日付が設定されます。何時間も経った後、EntityListener 内から entityManager を呼び出せないことがわかりました。

したがって、私の質問は 、ルールが更新されたときに、ストラテジーの lastModified 日付を更新するにはどうすればよいですか?

@Entity
@Table(name = "strategy")
public class Strategy {

@Id
@GeneratedValue
private Long id;

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

@Column(nullable = false)
private String name;



@Column
@Temporal(TemporalType.TIMESTAMP)
private Date modifiedDate;



@Table(name = "rule")
@EntityListeners({RuleListener.class})
public class Rule {

@Id
@GeneratedValue
private Long id;

@ManyToOne(/*optional = false, */fetch = FetchType.LAZY)
@JoinColumn(name="STRATEGY_ID"/*, nullable=false*/)  
private Strategy strategy;

@Column(nullable = false)
private String name;
4

1 に答える 1

0

私は通常、このようなものに@PrePersistandを使用し@PreUpdateます。Ruleへの直接参照があるように見えるので、そこにメソッドStrategyを配置できます。@PreUpdate

@Table(name = "rule")
@EntityListeners({RuleListener.class})
public class Rule {
  // ...

  @PreUpdate
  public void preUpdate() {
    strategy.setModifiedDate(new Date());
  }
}

または、リレーションシップをcascade更新するように指示し、代わりにStrategyを配置することもできます (この方法では、が個別に更新された場合でも変更できます)。@PreUpdateStrategymodifiedDateStrategy

@Entity
@Table(name = "strategy")
public class Strategy {
  // ...

  @PreUpdate
  public void preUpdate() {
    modifiedDate = new Date();
  }
}

@Table(name = "rule")
@EntityListeners({RuleListener.class})
public class Rule {
  // ...

  @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.UPDATE)
  @JoinColumn(name="STRATEGY_ID"/*, nullable=false*/)  
  private Strategy strategy;
}
于 2013-06-30T18:01:58.860 に答える