最代码广告位
首页>分享>用Hibernate实现领域对象的自定义字段>/customfieldsdemo/src/com/enterra/customfieldsdemo/CustomizableEntityManagerImpl.java
package com.enterra.customfieldsdemo;

import java.util.Iterator;

import org.hibernate.mapping.Column;
import org.hibernate.mapping.Component;
import org.hibernate.mapping.PersistentClass;
import org.hibernate.mapping.Property;
import org.hibernate.mapping.SimpleValue;

public class CustomizableEntityManagerImpl implements CustomizableEntityManager {
	private Component customProperties;

	private Class entityClass;

	public CustomizableEntityManagerImpl(Class entityClass) {
		this.entityClass = entityClass;
	}

	public Class getEntityClass() {
		return entityClass;
	}

	public Component getCustomProperties() {
		if (customProperties == null) {
			Property property = getPersistentClass().getProperty(CUSTOM_COMPONENT_NAME);
			customProperties = (Component) property.getValue();
		}
		return customProperties;
	}

	public void addCustomField(String name) {
		SimpleValue simpleValue = new SimpleValue();
		simpleValue.addColumn(new Column("fld_" + name));
		simpleValue.setTypeName(String.class.getName());

		PersistentClass persistentClass = getPersistentClass();
		simpleValue.setTable(persistentClass.getTable());

		Property property = new Property();
		property.setName(name);
		property.setValue(simpleValue);
		getCustomProperties().addProperty(property);

		updateMapping();
	}

	public void removeCustomField(String name) {
		Iterator propertyIterator = customProperties.getPropertyIterator();

		while (propertyIterator.hasNext()) {
			Property property = (Property) propertyIterator.next();
			if (property.getName().equals(name)) {
				propertyIterator.remove();
				updateMapping();
				return;
			}
		}
	}

	private synchronized void updateMapping() {
		MappingManager.updateClassMapping(this);
		HibernateUtil.getInstance().reset();
		// updateDBSchema();
	}

	private PersistentClass getPersistentClass() {
		return HibernateUtil.getInstance().getClassMapping(this.entityClass);
	}
}
最近下载更多
dd1995 LV81月17日
月亮月亮
luohaipeng LV232019年11月19日
太阳月亮星星星星星星
RicardoWX LV62018年6月10日
月亮星星星星
小白袁 LV12018年5月17日
星星
andycoder LV22018年5月3日
星星星星
nonaddress LV12018年2月28日
星星
xiayulin1983 LV22017年11月13日
星星星星
bhkkvip LV12017年7月3日
星星
a337214749 LV22017年6月27日
星星星星
sf0001 LV22016年12月18日
星星星星
最近浏览更多
53722426 LV66月2日
月亮星星星星
养生今天不睡 LV25月7日
星星星星
Jacko01 LV34月21日
星星星星星星
feng正经 LV34月19日
星星星星星星
筱进GG LV383月24日
太阳太阳月亮星星星星
dd1995 LV81月17日
月亮月亮
luohaipeng LV232019年11月19日
太阳月亮星星星星星星
wuxia3470344302019年8月18日
暂无贡献等级
DawnLi LV12019年3月11日
星星
longyin2018 LV142019年3月3日
月亮月亮月亮星星星星
顶部客服微信二维码底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友