Tag: jpa

JPA映射:“QuerySyntaxException:foobar未映射…”

我一直在玩一个非常简单的JPA例子,并试图调整它到一个现有的数据库。 但是我不能通过这个错误。 (下面)这只是一些简单的事情,我没有看到。 org.hibernate.hql.internal.ast.QuerySyntaxException: FooBar is not mapped [SELECT r FROM FooBar r] org.hibernate.hql.internal.ast.util.SessionFactoryHelper.requireClassPersister(SessionFactoryHelper.java:180) org.hibernate.hql.internal.ast.tree.FromElementFactory.addFromElement(FromElementFactory.java:110) org.hibernate.hql.internal.ast.tree.FromClause.addFromElement(FromClause.java:93) 在下面的DocumentManager类(一个简单的servlet,因为这是我的目标)做两件事情: 插入一行 返回所有行 插入工作完美 – 一切都很好。 问题在于检索。 我已经尝试了Query q = entityManager.createQuery参数的各种值,但没有运气,我已经尝试了各种更明确的类注解(如列types),都没有成功。 请救我自己。 我确定这是一个小事。 我对JPA的经验不足使我无法继续前进。 我的./src/ch/geekomatic/jpa/FooBar.java文件: @Entity @Table( name = "foobar" ) public class FooBar { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) @Column(name="id") private int id; @Column(name="rcpt_who") private String rcpt_who; @Column(name="rcpt_what") private String rcpt_what; […]

谷歌应用引擎的gradleunit testing在哪里期待persistence.xml?

我已经使用Datanucleus JPA提供程序的Maven原型项目创build了一个Google应用程序引擎项目,基本上遵循Google应用程序引擎文档。 运行maven目标“testing”时一切正常。 现在我不得不将这个项目整合到Android studio中,并且希望将构build脚本迁移到gradle。 我把所有的依赖关系从pom.xml复制到build.gradle ,并且项目build.gradle 。 但是,所有访问Google数据存储区的testing都会失败。 在testing输出期间,我收到以下消息: 警告:在当前线程的CLASSPATH中找不到META-INF / persistence.xml文件! 我检查了build期间创build的build文件夹,没有文件夹包含src/main/webapp/WEB-INF/classes/META-INF中的persistence.xml 然而,使用maven,它正确地放在target/myapp-1.0-SNAPSHOT/WEB-INF/classes/META-INF文件夹中。 我曾尝试使用gradle copy任务将persistence.xml复制到不同的位置,比如build/classes/META-INF build/classes/webapp/WEB-INF/classes/META-INF等,但是没有任何工作。

我如何validation两个或多个字段的组合?

我正在使用JPA 2.0 / Hibernatevalidation来validation我的模型。 我现在有一个情况需要validation两个字段的组合: public class MyModel { public Integer getValue1() { //… } public String getValue2() { //… } } 如果getValue1()和getValue2()都为null ,则该模型无效 ,否则为有效。 我如何使用JPA 2.0 / Hibernate执行这种validation? 用一个简单的@NotNull注解,两个getter必须是非空的才能通过validation。

与JPA Kotlin:默认构造函数地狱

按照JPA的要求,@ @Entity类应该有一个默认的(非arg)构造函数来从数据库中检索对象时实例化对象。 在Kotlin中,属性在主构造函数中声明非常方便,如下例所示: class Person(val name: String, val age: Int) { /* … */ } 但是,当非参数构造函数被声明为次要构造函数时,它需要传递主构造函数的值,所以需要一些有效的值,如下所示: @Entity class Person(val name: String, val age: Int) { private constructor(): this("", 0) } 如果这些属性比String和Int有更复杂的types,并且它们是不可空的,那么为它们提供值看起来完全不好,尤其是当主构造函数和init块中有很多代码,并且参数是积极使用 – 当它们被重新分配时,大部分代码将被重新执行。 而且, val -properties不能在构造函数执行后重新分配,所以不可变性也会丢失。 所以问题是:Kotlin代码如何适应与JPA无代码重复,select“魔术”的初始值和不可变性的损失? PS除了JPA,Hibernate是否可以构造没有默认构造函数的对象呢?

什么是JPA中使用的referencedColumnName?

在JPA中有一个名为referencedColumnName的属性,可以在@JoinColumn, @PrimaryKeyJoinColumn设置,这个设置背后的想法是什么,有人能给出一个很好的例子来说明这个可以使用的地方吗?

在@Column JPA annontation上设置length属性时会做些什么?

在JPA中设置列的长度到底是什么? @Column(name = "middle_name", nullable = false, length = 32) public String getMiddleName() { return this.middleName; } 我知道你可以使用注释来生成基于实体对象的数据库模式(DDL),但是当持久化发生时长度会做任何types的检查或截断,或者它仅用于模式创build? 我也意识到,JPA可以坐在各种实现的顶部,在这种情况下我所关心的实现是Hibernate。

JPA @OneToOne共享ID – 我可以做得更好吗?

我正在使用一个我不想改变的现有模式。 该模式在表Person和VitalStats之间具有一对一的关系,其中Person具有主键,并且VitalStats使用相同的字段作为其主键和对于Person的外键,这意味着其值是相应的PK的值人。 这些logging是由外部进程创build的,我的JPA代码永远不需要更新VitalStats。 对于我的对象模型,我希望我的Person类包含一个VitalStats成员,但是: 当我尝试 @Entity public class Person{ private long id; @Id public long getId(){ return id; } private VitalStats vs; @OneToOne(mappedBy = “person”) public VitalStats getVs() { return vs; } } @Entity public class VitalStats{ private Person person; @OneToOne public Person getPerson() { return person; } } 我有这个问题,VitalStats缺less一个@ Id,这不适用于@实体。 如果我尝试 @Id @OneToOne public […]

hibernate一对一:getId()而不提取整个对象

我想获取一对一关系的id而不加载整个对象。 我想我可以使用延迟加载,如下所示: class Foo { @OneToOne(fetch = FetchType.LAZY, optional = false) private Bar bar; } Foo f = session.get(Foo.class, fooId); // Hibernate fetches Foo f.getBar(); // Hibernate fetches full Bar object f.getBar().getId(); // No further fetch, returns id 我想f.getBar() 不会触发另一个提取。 我想hibernate给我一个代理对象,允许我调用.getId()而不实际获取酒吧对象。 我究竟做错了什么?

在实体中使用Enum时进行查询的问题

我在问题实体中具有以下内容: @NamedQuery(name = "Question.allApproved", query = "SELECT q FROM Question q WHERE q.status = 'APPROVED'") 和 @Enumerated(EnumType.STRING) private Status status; // usual accessors 我得到这个例外: exception说明:编译查询时出错[Question.countApplied: SELECT COUNT(q) FROM Question q WHERE q.status = 'APPROVED' ],第1行,第47列:无效枚举等于expression式,无法比较types[myCompnay.application.Status]枚举值[myCompnay.application.Status]与一个非枚举值的types[java.lang.String] 。 在org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.deploy(EntityManagerSetupImpl.java:501) 我该如何解决?

JPA,Mysql Blob返回的数据太长了

我在我的实体中有一些byte[]字段,例如: @Entity public class ServicePicture implements Serializable { private static final long serialVersionUID = 2877629751219730559L; // seam-gen attributes (you should probably edit these) @Id @GeneratedValue private Long id; private String description; @Lob @Basic(fetch = FetchType.LAZY) private byte[] picture; 在我的数据库模式的字段设置为BLOB所以这应该没问题。 无论如何:每次当我尝试插入一张图片或pdf – 没有大于1mb ,我只收到这个 16:52:27,327 WARN [JDBCExceptionReporter] SQL Error: 0, SQLState: 22001 16:52:27,327 ERROR [JDBCExceptionReporter] Data […]