标签: metamodel

在Django中获取模型的字段

给定一个Django模型,我试图列出它的所有字段.我已经看到了一些使用_meta模型属性执行此操作的示例,但是meta前面的下划线是否表示_meta属性是私有属性,不应该直接访问?...例如,因为_meta的布局将来可能会改变而不是一个稳定的API?

_meta是这个规则的例外吗?它是否稳定并且可以使用,或者它被认为是不好的做法?或者是否有函数或其他方法来反省模型的字段而不使用_meta属性?下面是一些链接的列表,显示了如何使用_meta属性执行此操作

任何建议都非常感谢.

django对象获取/设置字段

http://www.djangofoo.com/80/get-list-model-fields

如何反省django模型领域?

django introspection django-models metamodel

107
推荐指数
7
解决办法
9万
查看次数

如何生成JPA 2.0元模型?

本着与CriteriaQuery相关的类型安全的精神,JPA 2.0还有一个API来支持实体的Metamodel表示.

是否有人知道这个API的全功能实现(生成Metamodel而不是手动创建元模型类)?如果有人也知道在Eclipse中设置它的步骤,那将是非常棒的(我假设它就像设置注释处理器一样简单,但你永远不知道).

编辑:偶然发现了Hibernate JPA 2 Metamodel Generator.但问题仍然存在,因为我找不到jar的任何下载链接.

编辑2:少顷已经过去了,因为我问过这个问题,但我想我会回来,并添加一个链接到SourceForge上的Hibernate JPA模型生成项目

java jpa annotation-processing metamodel jpa-2.0

89
推荐指数
6
解决办法
10万
查看次数

如何使用泛型关系实现多态JPA实体

我正在尝试使用JPA 2.0来创建具有泛型关系的多态实体.应该有两个表,一个事件表和一个通知表.在这些表中是彼此相关的具体实体,如下所示:

Event  <---------- Notification<X extends Event>
 |                      |
LoginEvent <------ LoginNotification extends Notification<LoginEvent>
Run Code Online (Sandbox Code Playgroud)

从逻辑上讲,这应该可以在hibernate中实现,因为它可以在SQL中实现:

+----------+    +----------+
| Event    |    | Notif    |
+----------+    +----------+
|          |    | Id       |
| Id       | <- | Evt_id   |
| Type     | <- | Type     |
| ...      |    | ...      |
+----------+    +----------+
Run Code Online (Sandbox Code Playgroud)

这就是我所拥有的:

@Entity
@Inheritance
public abstract class Event{

...
}

@Entity
public class LoginEvent extends Event{

...
}

@Entity
@Inheritance
public abstract class Notification<X extends Event>{

 @ManyToOne(optional=false, targetEntity=Event.class)
 @JoinColumn …
Run Code Online (Sandbox Code Playgroud)

java hibernate metamodel jpa-2.0

15
推荐指数
1
解决办法
1万
查看次数

JPA Criteria API:LEFT JOIN用于可选关系

我第一次使用Criteria API.它是关于抽象通用构建器的查询:

public TypedQuery<T> newQuery( Manager<?,T> manager )
{
    CriteriaBuilder builder = this.entityManager.getCriteriaBuilder();

    Class<T> genericClass = ( Class<T> ) ( ( ParameterizedType ) manager.getClass().getGenericSuperclass() ).getActualTypeArguments()[1];

    CriteriaQuery<T> criteriaQuery = builder.createQuery( genericClass );
    Root<T> root = criteriaQuery.from( genericClass );

    ...
}
Run Code Online (Sandbox Code Playgroud)

该调用默认为实体上找到的所有关系criteriaQuery.from( genericClass );生成SQL INNER JOIN.这是一个问题,因为每个关系都为空(DB NULL或不使用外键且具有无效引用的DB)这些实体将在结果列表中丢失,从而有效地产生错误的搜索结果.

可以在此处找到一个示例:JPA Criteria query Path.get left join is it possibile

对于由此类/方法实例化的查询,我想要发生的是实体上的所有关系,这里genericClass映射为optional = true

@ManyToOne( FetchType.EAGER, optional = true )
@JoinColumn( name = "CLOSE_USER_ID", referencedColumnName = "USER_ID" )
private …
Run Code Online (Sandbox Code Playgroud)

java sql jpa criteria-api metamodel

12
推荐指数
1
解决办法
3万
查看次数

我怎样才能发现Perl 6类型的所有角色?

随着.does我可以检查一个类型都有,我已经知道了作用.我想获得角色列表.继承有.^mro但我没有看到类似于元模型中的角色.

除此之外,给定一个"类型",如何判断它是被定义为类还是角色?

oop roles perl6 metamodel raku

12
推荐指数
3
解决办法
227
查看次数

JPA/Metamodel:Sun Docs中的奇怪(不一致?)示例

Sun Online资源中,他们提供了关于Criteria/Metamodel API使用的儿子示例,但据我了解Java,似乎无法工作:

CriteriaQuery<Pet> cq = cb.createQuery(Pet.class);
Metamodel m = em.getMetamodel();
EntityType<Pet> Pet_ = m.entity(Pet.class);
EntityType<Owner> Owner_ = m.entity(Owner.class);

Root<Pet> pet = cq.from(Pet.class);
Join<Owner, Address> address = cq.join(**Pet_.owners**).join(**Owner_.addresses**);
Run Code Online (Sandbox Code Playgroud)

Pet_是一个类的实例, EntityType没有定义任何名为owners或的属性addresses.

他们确实定义了名为Pet_Owner_元模型的类,但是在这里输入它们会产生与变量名称的冲突......我是对的吗?

__

(这个问题也与此相关的一个)

java jpa criteria-api metamodel jpa-2.0

11
推荐指数
1
解决办法
3298
查看次数

如何获取持久对象的SingularAttribute映射值?

我有一个持久对象(Action)和自动生成的数据模型(Action_).通过拥有Action类的对象和SingularAttribute的实例,是否可以获得与给定的SingularAttribute相对应的字段?

我需要一个这样的函数:

public S getValue(T object,SingularAttribute<T,S> attribute);
Run Code Online (Sandbox Code Playgroud)

我的实体类(Action.java):

@Entity
@Table(name="ACTION")
public class Action implements Serializable {
    private long id;
    private String name;

    public Action() {
    }


    @Id
    @Column(unique=true, nullable=false, precision=6)
    public long getId() {
        return this.id;
    }

    public void setId(long id) {
        this.id = id;
    }


    @Column(length=50)
    public String getName() {
        return this.name;
    }

    public void setName(String name) {
        this.name = name;
    }
}
Run Code Online (Sandbox Code Playgroud)

我的元模型类(Action_.java):

@StaticMetamodel(Action.class)
public class Action_ {
    public static volatile SingularAttribute<Action, Long> id;
    public static volatile SingularAttribute<Action, …
Run Code Online (Sandbox Code Playgroud)

persistence jpa java-ee metamodel

10
推荐指数
2
解决办法
7162
查看次数

在XTend中加载EMF Model实例

我正在XTend中构建一个代码生成器,我已经有了一个输入模型和元模型.也就是说,我使用ATL为我的XTend代码生成器生成输入模型(作为转换序列的一部分,逐渐降低抽象级别,而不是一次性;这就是我不使用xtext创建语法的原因) .

所以要很清楚,我的代码生成器输入模型是XMI格式的文件,而不是在XTEXT项目的语法(即使不使用)!而且我认为这会给我带来麻烦/困惑.

我使用现有模型创建了一个新的XText项目,右键单击.text文件,运行为,生成人工制品,然后我对mwe2文件执行了相同的操作.

下一步是什么,我做得对吗?如何启动代码生成器?所有示例都来自您使用XText创建DSL的POV.我有一个EMF元模型,以及一个基于XMI的实例.如何使用XTend进一步处理?

任何提示或指向教程的指针都是有帮助的.

解:

该解决方案是为斯文在我接受的答案建议,而且我想指出的是您需要使用的genmodel从你的元模型生成Java工件.此链接显示了如何:http://www.vogella.com/articles/EclipseEMF/article.html,请参阅第4节.这可能看起来太符合逻辑,但我认为无论如何都值得注意.

xmi metamodel xtend emf

10
推荐指数
1
解决办法
4426
查看次数

如何使用Gradle 5.x生成JPA元模型

我目前正在尝试从gradle 4.8.1升级到5.1.1,但是无法为我们的代码生成休眠元模型。

问题是gradle 5忽略了与编译类路径一起传递的注释处理器,但是我发现的所有插件都使用了这个(即"-proc:only")。

我试图按照gradle的指示明确指定注释处理器(https://docs.gradle.org/4.6/release-notes.html#convenient-declaration-of-annotation-processor-dependenciesannotationProcessor 'org.hibernate:hibernate-jpamodelgen'

但这无济于事,我仍然收到以下错误:

警告:注释处理未进行编译,但未找到处理器。

也许插件也需要更新,但是正如我所说,我发现所有插件都将注释处理器与类路径一起传递。我们目前正在使用这个:https : //github.com/Catalysts/cat-gradle-plugins/tree/master/cat-gradle-hibernate-plugin

java hibernate jpa gradle metamodel

10
推荐指数
1
解决办法
2732
查看次数

使用Criteria API创建查询(JPA 2.0)

我正在尝试使用JPA 2.0中的Criteria API创建查询,但我无法使其工作.

问题在于"介于"条件方法.我阅读了一些文档以了解我必须如何做,但是因为我发现了JPA,所以我不明白为什么它不起作用.

首先,当我写"Transaction_"时,我看不到应该出现的"creationDate".

我认为这可能是正常的,因为我读过元模型是在运行时生成的,所以我尝试使用'Foo_.getDeclaredSingularAttribute("value")'而不是'Foo_.value',但它仍然无法正常工作.

这是我的代码:

public List<Transaction> getTransactions(Date startDate, Date endDate) {
    EntityManager em = getEntityManager();
    try {
        CriteriaBuilder cb = em.getCriteriaBuilder();
        CriteriaQuery<Transaction> cq = cb.createQuery(Transaction.class);
        Metamodel m = em.getMetamodel();
        EntityType<Transaction> Transaction_ = m.entity(Transaction.class);
        Root<Transaction> transaction = cq.from(Transaction.class);

        // Error here. cannot find symbol. symbol: variable creationDate
        cq.where(cb.between(transaction.get(Transaction_.creationDate), startDate, endDate));

        // I also tried this:
        // cq.where(cb.between(Transaction_.getDeclaredSingularAttribute("creationDate"), startDate, endDate));

        List<Transaction> result = em.createQuery(cq).getResultList();
        return result;
    } finally {
        em.close();
    }
}
Run Code Online (Sandbox Code Playgroud)

有人能帮我解决这个问题吗?谢谢.

编辑:这里是事务源(几乎没有任何内容,因为它是由Netbeans自动生成的,来自我的数据库)

package projetjava.db;

import …
Run Code Online (Sandbox Code Playgroud)

java jpa criteria-api metamodel jpa-2.0

9
推荐指数
1
解决办法
1万
查看次数