Tag: jpa

如何通过使用Spring Data调用strored过程来选择实体

假设我有一个包含以下select的MySQL存储过程: select * from users; 如何在@Procedure中使用@Procedure注释,以便我可以得到结果? 就像是: public UserRepository extenda JpaRepository{ @Procedure(‘get_users’) List getUsers(); }

在persistence.xml之外定义jpa实体类

有没有办法在persistence.xml之外定义jpa实体类(即在单独的文件中)? 能够将persistence.xml作为外部文件也足够了。 先谢谢,史蒂文 编辑:对不起,我不清楚。 这是在Java SE环境中。 另外,我想在persistence.xml文件中没有some.class.AClass的列表。 这是因为我想动态创建这个类列表并引用包含该列表的文件。 Edit2:通过在打包之前在构建时编写persistence.xml文件来管理解决此问题。 如果有人感兴趣,我使用scannotations来发现所有使用@Entity注释的类,并将它们写入target / classes / META-INF中的persistence.xml文件(使用maven)。

在没有XML的情况下配置JPA / Hibernate / PostgreSQL

我正在回到Java世界,我正在尝试使用JPA,Hibernate和PostgreSQL配置一个新的Spring Web应用程序。 我发现了许多带有各种XML配置文件的旧示例,我想知道是否有一种首选的新方法来执行此配置而不依赖于XML文件创作。 我需要配置的一些东西是hibernate sql方言,驱动程序等。

如何在hibernate中使用单个表连接三个表?

我有三个表A , B和C以及一个映射表A_B_C ,它具有所有三个表的外键和一些其他属性(比方说X , Y )。 现在,我想加入在我的java类中表示这三个表。 这些表之间的关系是一对多的。 因此,我希望我的Java类看起来像这样。 @Entity(name = “A”) @Table(name = “A”) public class A { ??? Hibernate Annotation or query Map<B,List> BMapC; } @Entity(name = “B”) @Table(name = “B”) public class B { … } @Entity(name = “C”) @Table(name = “C”) public class C { … } 我想知道是否可以利用Hibernate Annotations。 如果没有,有没有办法可以编写自定义查询并填充变量?

如何使用Spring Data JPA查询Map值?

所以我的数据库模型是这样的:我有Store ,每个Store都有一个本地化的名称。 所以我选择将本地化名称表示为这样的Map : public class Store { private Map name; } 你可以看到它是的Map,其中LocalizedValue是这样的类: @Embeddable public class LocalizedValue { @Column(name = “value”) private String value; } 这一切都很棒。 但是我遇到了一个问题,我想查询我的Spring Data JPA存储库并查找具有给定英文名称的所有商店。 所以我的存储库方法如下所示: Store findByName(Map.Entry name); 但它抛出了这个exception: 2014-10-07 23:49:55,862 [qtp354231028-165] ERROR: Parameter value [en=Some Value] did not match expected type [com.test.LocalizedValue(n/a)]; nested exception is java.lang.IllegalArgumentException: Parameter value [en=Some […]

JPA。 JoinTable和两个JoinColumns

我需要创建表PORTATION_MODEL_SET。 我需要从表portation创建两个键,从table phone_model创建一个键 我有代码: @Entity @Table(name=”PORTATION”) @SecondaryTable(name=”PORTATION”) @Cache(usage=CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) public class JDBCPortation implements Portation { @Id @GeneratedValue(strategy=GenerationType.AUTO) private Integer id; @ManyToOne(targetEntity=JDBCContentMetaData.class, fetch=FetchType.LAZY) @JoinColumn(name=”fk_content_id”,nullable=false) private JDBCContentMetaData content; @ManyToMany(cascade={CascadeType.ALL},fetch=FetchType.LAZY,targetEntity=JDBCPhoneModel.class) @JoinTable( name=”PORTATION_MODEL_SET”, joinColumns={ @JoinColumn(table=”PORTATION”, name=”fk_portation_id”, referencedColumnName=”id”), @JoinColumn(table=”PORTATION”, name=”fk_content_id”, referencedColumnName=”fk_content_id”, nullable=true) }, inverseJoinColumns=@JoinColumn(table=”PHONE_MODEL”,name=”fk_phone_model_id”, referencedColumnName=”id”)) private List phoneModel; //more code….. } 和这个: @Entity @Table(name=”PHONE_MODEL”) @Cache(usage=CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) public class JDBCPhoneModel implements PhoneModel { […]

插入初始数据JPA

是否可以在我的数据库中加载初始数据? 我正在使用JPA并使用Drop and Create策略,这样每次我想测试我的应用程序时,数据库首先被清除,我将不得不重新创建所有内容。 我知道在其他语言中(Php – > Doctrine datafixtures,C# – > Context)可以在持久化类之后加载初始数据。 但是我试图在java中搜索这样的function,我找不到一个好方法来做到这一点。 我已经在stackoverflow中找到了几个关于此的主题,但它们似乎都没有一个好的答案。 我正在使用java桌面应用程序(不是spring)

复制一组实体并在Hibernate / JPA中保留

我想在我的数据库中复制一组实体。 我用以下方式检索了这个系列: CategoryHistory chNew = new CategoryHistory(); CategoryHistory chLast = (CategoryHistory)em.createQuery(“SELECT ch from CategoryHistory ch WHERE ch.date = MAX(date)”).getSingleResult; List categories = chLast.getCategories(); chNew.addCategories(categories)// Should be a copy of the categories: OneToMany 现在我想复制一个’类别’列表并用EntityManager保存它。 我正在使用JPA / Hibernate。 UPDATE 在知道如何分离我的实体之后,我需要知道要分离的内容:当前代码: CategoryHistory chLast = (CategoryHistory)em.createQuery(“SELECT ch from CategoryHistory ch WHERE ch.date=(SELECT MAX(date) from CategoryHistory)”).getSingleResult(); Set categories =chLast.getCategories(); //detach […]

正在加载javassist-ed Hibernate实体

我有一个JSF转换器,我用于包含几种不同实体类型的SelectItem列表。 在getAsString()方法中,我创建了字符串作为后缀为“:”的类名和ID。 MySuperClass superClass = (MySuperClass)value; if(superClass != null) { return String.valueOf(superClass.getClass().getName()+”:”+superClass.getId()); } 这允许我在从UI返回的路上通过执行以下操作在getAsObject()加载正确的实体: String className = value.substring(0, value.indexOf(“:”)); long id = Long.parseLong(value.substring(value.indexOf(“:”)+1)); Class entitySuperClass = (Class) Class.forName(className); MySuperClass superClass = (MySuperClass)getEntityManager().find(entitySuperClass, id); 我的问题是我的getAsString()实体是一个代理。 因此,当我执行getClass()。getName()时,我得到com.company.MyEntity_$$_javassist_48 ,然后在find()上失败,而不是获取com.company.MyEntity_$$_javassist_48 。 有没有办法(除了字符串操作)获取具体的类名(例如com.company.MyEntity)? 谢谢。

以编程方式访问JPA

是否可以通过Java API访问的信息? MySchema 我想通过JPA API或EclipseLink API阅读模式“MySchema”,这是我使用的实现。 类似于:entityManager.getDefaults()。getSchema(); 可以投射或使用任何EclipseLink类,这对此很好。 谢谢