Hibernate中的@Fetch(FetchMode.JOIN)违反了FetchType.LAZY

时间:2017-12-15 10:40:47

标签: java hibernate join fetch hibernate-criteria

我正在使用hibernate> 5.2.10.Final,并使用FETCH JOIN来急切加载内部实体。

@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinTable(name = "XYX", joinColumns = @JoinColumn(name = "TT"), inverseJoinColumns = @JoinColumn(name = "TT"))
@Fetch(FetchMode.JOIN)
private Set<PWR> pwrs;

由于FetchType设置为Lazy,而FetchMode设置为JOIN,因此在相关查询中,pwrs会急切地加载。

所以,我的问题是,如果我们使用FetchMode作为JOIN,我们不会使用FetchType吗?

1 个答案:

答案 0 :(得分:0)

public class MainViewModel: INotifyPropertyChanged { Random _rnd = new Random(); private MyGridData _selectedData; private ObservableCollection<MyGridData> _gridData; public event PropertyChangedEventHandler PropertyChanged; protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); } public MainViewModel() { var newData = new List<MyGridData> { new MyGridData { Column1 = "AAAAAA 01", Column2 = "aaaaaaaa 02" }, new MyGridData { Column1 = "BBBBBB 01", Column2 = "bbbbbbbb 02" }, new MyGridData { Column1 = "CCCCCC 01", Column2 = "cccccccc 02" }, }; GridData = new ObservableCollection<MyGridData>(newData); } public MyGridData SelectedData { get { return _selectedData; } set { if (value == _selectedData) //if same item selected return; _selectedData = value; OnPropertyChanged(); DoSomethingWhenValueChanged(); // Will add a new line } } public ObservableCollection<MyGridData> GridData { get { return _gridData; } set { if (value == _gridData) return; _gridData = value; OnPropertyChanged(); } } private void DoSomethingWhenValueChanged() { var newData = GridData.ToList(); newData.Add(new MyGridData { Column1 = (_rnd.Next(100)).ToString(), Column2 = (_rnd.Next(1000)).ToString() }); //Add new random item GridData = new ObservableCollection<MyGridData>(newData); //update your DataGrid } } public class MyGridData { public string Column1 { get; set; } public string Column2 { get; set; } } 会覆盖@Fetch(FetchMode.JOIN)您无法同时使用这两者。