@ManyToOneと@OneToManyの使い方の自己結び

2635 ワード

プロジェクトに権限のあるものを書いて、メモしておきましょう.
1.モジュール管理
関連するテーブルから、ルートモジュールがあります.下にサブモジュールを追加して、主に左側のメニューを作るために使用されます.肝心なところのコードです.
@Entity
@Table(name = "partenr_model", schema = "dbo")
public class Model {

@ManyToOne
@JoinColumn(name = "parent_id")
private Model parent;

//    easyui             
@OneToMany(mappedBy = "parent", orphanRemoval = true, cascade = CascadeType.ALL)
private List children = new ArrayList();
}
//        
@OneToMany(mappedBy = "model", orphanRemoval = true, cascade = CascadeType.ALL)
private List permissions = new ArrayList();
@JoinColunがmanyに書いている方のname属性は関連の外部健です.もちろんデータベース表は外部健が作成します.
@ManyToOneという注釈の中に怠惰にロードしたものとCascadeTypeが書いてあります.怠け者でロードすると問題があります.
怠惰なロードをオープンするにはweb.xmlファイルにフィルターを追加する必要があります.

		openSession
		com.wl.cn.filter.OpenSessionFilter
	
	
		openSession
		/*
	
そしてこれはフィルターの種類で、org.springframe ewark.orm.hibernate 3.support.OpenSession InVieFilterから引き継ぎます.
public class OpenSessionFilter extends OpenSessionInViewFilter {

	@Override
	protected Session getSession(SessionFactory sessionFactory) throws DataAccessResourceFailureException {
		/*Session session = SessionFactoryUtils.getSession(sessionFactory, true);
		session.setFlushMode(FlushMode.COMMIT);
		return session;*/
		return super.getSession(sessionFactory);
	}

	@Override
	protected void closeSession(Session session, SessionFactory sessionFactory) {
		//session.flush();
		super.closeSession(session, sessionFactory);
	}

}
問題は , フロントのフレームはeasyuiです.そして、私が調べたリストはそのまま転送します.
@RequestMapping("loadModelTree")
	@ResponseBody
	public JSONArray loadModelTree() {
		List list = modelService.findAll();
		String json = JSON.toJSONString(list);
		JSONArray arry = JSONArray.parseArray(json);
		return arry;
	}
そしてリストの中には子供が集まっているのではないですか?子供リストの対象は父親がいます.これは全部引用ですが、直接JSON.toJSONStringの時には引用もjson文字列になっていますので、easuyuiのdatagrideは解析できません.父の属性をnullにすればいいと思います.そして初めての進み方です.確かに全部のデータは正常に展示されましたが、2回目にはもう一つロードされました.なぜならば、私はparentの属性をnullにした時に対応するデータのparent_をロードしました.IDがnullに修正されました.最後に発見されたのは、私がカスタマイズしたオプショナルオンラインファイトの中で私のsession.set FlaushMode(Fush Mode.C.OMMIT)です.そしてflashしました.flashという意味です. 私の属性の変化をデータベースに更新します.解決方法はflushではなく、
関連の相対的には簡単にしてください.モジュール権限の集合とは、モジュールの下に追加と削除の操作があるという意味です.したがって、ペアが多い関係です.ページ上では、