0
@Entity
@Table(name = "artist")
public class Artist implements java.io.Serializable{

    @Basic
    @Column(name = "is_active",nullable=false)
    private Boolean isActive = false;

    @OneToMany(mappedBy = "artist", cascade = {CascadeType.ALL}, fetch = FetchType.LAZY)
    private Set<Project> projects= new HashSet<Project>(); 
}

and

@Entity
@Table(name = "project")
public class Project implements java.io.Serializable{

     @ManyToOne(fetch = FetchType.LAZY)
     @JoinColumn(name = "artist_id")
     private Artist artist;

     @Basic
     @Column(name = "is_active",nullable=false)
     private Boolean isActive = false;
}

Can I initialize isActive in Project like following with the intent that Project's flag gets initialized by Artist's flag

private Boolean isActive = ((getArtist()!=null)? getArtist().getIsActive(): false);

Will the order in which the members are defined in Project can cause isActive to be false always?

4

1 に答える 1

1

その宣言で:

private Boolean isActive = ((getArtist()!=null)? getArtist().getIsActive(): false);

アーティストと isActive の両方が Project のデフォルト コンストラクターの前に初期化されるため、isActive は常に false になります。したがって、artist が null に初期化され、次に isActive が false に初期化され (getArtist() が null であるため)、Project のデフォルト コンストラクターが実行されます (ただし、コンストラクターは何もしません)。したがって、isActive は常に false です。

于 2012-08-08T11:59:18.483 に答える