下面列出了javax.persistence.EntityManager#getMetamodel ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
public EntityType getTargetEntity(RegistryConfiguration registryConf, EntityManager entityManager) {
EntityType targetEntity;
String targetEntityName = getTargetEntityName(registryConf);
Metamodel classMetadata = entityManager.getMetamodel();
Iterator it = classMetadata.getEntities().iterator();
targetEntity = null;
while (it.hasNext()) {
EntityType entity = (EntityType) it.next();
String jpaEntityName = entity.getName();
if (entity != null && jpaEntityName.equals(targetEntityName)) {
targetEntity = entity;
break;
}
}
return targetEntity;
}
/** 指定したEntityクラスにエイリアスを紐付けたCriteriaを生成します。 */
private OrmCriteria(EntityManager em, Class<T> clazz, String alias) {
this.clazz = clazz;
this.metamodel = em.getMetamodel();
this.builder = em.getCriteriaBuilder();
this.query = builder.createQuery(clazz);
this.root = query.from(clazz);
this.alias = alias;
this.root.alias(alias);
}
/** 指定したEntityクラスにエイリアスを紐付けたCriteriaを生成します。 */
private OrmCriteria(EntityManager em, Class<T> clazz, String alias) {
this.clazz = clazz;
this.metamodel = em.getMetamodel();
this.builder = em.getCriteriaBuilder();
this.query = builder.createQuery(clazz);
this.root = query.from(clazz);
this.alias = alias;
this.root.alias(alias);
}
public Metamodel getMetamodel() {
final EntityManager entityManager = getEntityManager();
try {
final Timer timer = Op.getMetamodel.start(this.timer, this);
try {
return entityManager.getMetamodel();
} finally {
timer.stop();
}
} finally {
closeIfNoTx(entityManager);
}
}
private <T> String getTableName(EntityManager em, Class<T> entityClass){
/*
* Check if the specified class is present in the metamodel.
* Throws IllegalArgumentException if not.
*/
Metamodel meta = em.getMetamodel();
EntityType<T> entityType = meta.entity(entityClass);
//Check whether @Table annotation is present on the class.
Table t = entityClass.getAnnotation(Table.class);
String tableName = (t == null) ? entityType.getName().toUpperCase() : t.name();
return tableName;
}
public Attribute getIdAttribute(EntityManager em, Class<T> clazz) {
Metamodel m = em.getMetamodel();
IdentifiableType<T> of = (IdentifiableType<T>) m.managedType(clazz);
return of.getId(of.getIdType().getJavaType());
}