摘自ProEJB3JPA一书:Themostcommonstrategytohandlethis(-updateentities-)inJavaEEapplicationthatusesJPAistoplacetheresultsofthechangesintodetachedentityinstancesandmergethependingchangesintoapersistencecontextsothattheycanbewrittentothedatabase例子:emp参数是一个分离的实体@StatelesspublicclassEmployeeServiceBean{@P
我的问题是为什么flush不起作用:publicvoidejbService(){Customerc=em.find(Customer.class,1);c.setName("newName");em.flush();//atthispointwhenIquerymysqltableIcannotsee"newName"thread.sleep(10000);c.setName("anotherName");}完成该方法后,我在数据库中看到“anotherName”我也用em.find(Customer.class,1,Lock.None);检查它但还是不行RGDS
我目前正在使用@PostPersist和@PostUpdate,在这些触发器中我正在持久化其他实体。问题是,这些触发器是否在同一事务中,如果不是,是否可以强制执行?对我来说,它是这样工作的。当我查看日志时,事务不存在(它是在触发器启动之前提交的)这阻止了我(在注入(inject)bean的持久方法上没有REQUIRES_NEW)将其他实体保存在数据库。REQUIRED属性被完全忽略,MANDATORY属性不抛出异常。这可能是JUnit的问题(因为我处于开发阶段并且没有在完整环境中测试行为。)?如果无法在此触发器上扩展事务,如何确保回滚发生在@PostPersist和@PostUpdat
在我们的应用程序中,我们需要有只能分配一次的字段。一开始我们想到的是封装字段,让setters私有(private)化。然而,一些问题引起了:没有公共(public)setter,Hibernate是否仍然能够从数据库映射字段?我能否去除setter并使字段仅在实体构造函数中可变?最后,是否有任何标准的JPA方法可以使字段不可变?提前致谢。 最佳答案 尝试@Column(updatable=false)并将您的二传手设为私有(private)。(如果你愿意,请公开你的setter/getter)我认为这是最佳实践。P.S.:如果您对
我从JPA2开始,到目前为止感觉很舒服。但是当为具有默认值的NONNULL数据库字段保留具有null属性值的实体时,我遇到了问题。我希望能够将实体属性保留为空,并让数据库插入默认值。我当前的设置是带有PostgreSQL的openJPA。我有这个VERSION数据库表(Vorgabewert=默认值):Spalte|Typ|Attribute----------------+-----------------------------+----------------------------status_|smallint|notnullVorgabewert0time_|timesta
我与以下实体类具有双向一对多关系:0或1个客户0个或多个产品订单当持久化客户端实体时,我希望关联的产品订单实体也被持久化(因为它们到“父”客户端的外键可能已更新)。当然,所有必需的CASCADE选项都在客户端设置。但是,如果在引用现有产品订单时第一次持久化新创建的客户端,则它不起作用,如在这种情况下:产品订单“1”已创建并保留。工作正常。已创建客户“2”并将产品订单“1”添加到其产品订单列表中。然后它被坚持。不起作用。我尝试了几个方法,但没有一个显示出预期的结果。请参阅下面的结果。我在这里阅读了所有相关问题,但它们对我没有帮助。我在GlassFish3.1.2上的ApacheDerby
我有两个实体:UserAccount和Notification。它们具有如下所示的关系。publicclassUserAccount{@Id@Column(name="USER_NAME")privateStringemailId;@OneToMany(fetch=FetchType.EAGER,cascade=CascadeType.ALL)@JoinTable(name="USERS_NOTIFICATIONS",joinColumns={@JoinColumn(name="USER_NAME")},inverseJoinColumns={@JoinColumn(name="NOT
首先我要说的是,我对JavaEE还很陌生,而且我还没有很强的Java理论背景。我无法理解如何在Java中将JPA与interfaces一起使用。为了说明我发现的难点,我创建了一个非常简单的示例。如果我有两个简单的接口(interface)Person和Pet:publicinterfacePerson{publicPetgetPet();publicvoidsetPet(Petpet);}publicinterfacePet{publicStringgetName();}还有一个实体PersonEntity实现了Person以及一个PetEntity实现了Pet:@Entitypubl
这是我的问题的一个简化示例。我有这个存储库和实体类。publicinterfaceThingRepositoryextendsJpaRepository{ThingEntityfindByFooInAndBar(StringfooIn,Stringbar);}@EntitypublicclassThingEntity{@Column(name="FOO_IN",nullable=false,length=1)privateStringfooIn;publicStringgetFooIn(){returnfooIn;}publicsetFooIn(StringfooIn){this.fo
我最近开始使用Springdatajpa。如果有人能阐明技术差异SpringDataJPAfindFirst和findTop。区别,用法。谢谢 最佳答案 来自SpringDataJPA-ReferenceDocumentation,限制查询结果可以通过关键字first或top来限制查询方法的结果,这两个关键字可以互换使用。可以将可选数值附加到top/first以指定要返回的最大结果大小。如果省略数字,则假定结果大小为1。使用Top和First限制查询的结果大小UserfindFirstByOrderByLastnameAsc();U