Tag: jpa

为什么我的@ApplicationScope CDI bean没有更新?

在我的应用程序中,我有一个@ApplicationScoped CDI bean来存储数据库中的一些信息: @Named @ApplicationScoped public class MrBean { @EJB private SoyaBean soyaBean; private List myToys; @PostConstruct public void prepareMrBean() { this.myToys = soyaBean.getToys(); } public void updateToys() { this.myToys = soyaBean.getToys(); } } 我还有一个AddToy.xhtml页面,它只是将一个玩具添加到数据库中。 支持bean如下: @Named @RequestScoped public class MrsBean { @EJB private SoyaBean soyaBean; @Inject private MrBean mrBean; public void addToy() { this.soyaBean.addToy(); […]

GAE,JPA,XG-transactions,太多实体组exception

我知道GAE上的XG事务中有5个实体组的限制,但我认为我在一个事务中只使用了3个组(Commodity,Category,CommodityCategory)并且仍然遇到此exception:引起:java.lang.IllegalArgumentException:operating单个事务中的实体组太多。 以下是我的datamodel和dao代码的重要部分: 分类模型 @Entity(name = “Category”) public class Category extends BaseDatastoreEntity{ private String name; private Key parentKey; private String parentName; @Unowned @OneToMany(cascade= CascadeType.ALL) private Set commodityCategories = new HashSet(); . . public void addCommodityCategoryInternal(CommodityCategory commodityCategory) { this.commodityCategories.add(commodityCategory); } 商品模型 @Entity(name = “Commodity”) public class Commodity extends BaseDatastoreEntity implements IRateable{ private String name; private BigDecimal price; […]

Hibernate:直接在bean中设置Id或调用load()或get()方法之间的区别?

以下是加载的示例: – Stock stock = (Stock)session.load(Stock.class, new Integer(2)); StockTransaction stockTransactions = new StockTransaction(); //set stockTransactions detail stockTransactions.setStock(stock); session.save(stockTransactions); 有什么区别,如果我直接设置id如下: – Stock stock =new Stock(); stock.setId(2); StockTransaction stockTransactions = new StockTransaction(); //set stockTransactions detail stockTransactions.setStock(stock); session.save(stockTransactions); 因为我已经知道了股票表的Id。 你打电话给负载还是搞定?

使用OpenJPA从数据库中检索主键(ID)(?)

这是一个写入和读取mysql数据库的简单程序。 当我输入测试数据时,所有这些都在mySQL客户端中可见。 然而,当我使用OpenJPA检索相同的数据时,所有ID都显示为“0”,但名称是正确的。 在交易过程中,ID可能会丢失的原因是什么? POJOclass import java.io.Serializable; import javax.persistence.*; @Entity (name=”People”) public class People implements Serializable{ /** * */ private static final long serialVersionUID = 801578124126646759L; @Id private int id; @Column(length=32) private String name; public People(int id,String name) { setId(id); setName(name); } public int getId() { return id; } public void setId(int id) { this.id […]

JPA / Hibernate选择查询返回重复记录

我有一个表,比如,具有ID,State和User_ID的Instrument作为列。 所以我有这个JPA查询返回所有具有匹配User_ID的乐器记录。 query = manager.createQuery(“SELECT instrument from Instrument instrument where instrument.User_ID=:User_ID”,Instrument.class); query.setParameter(“User_ID”, User_ID); List instruments= query.getResultList(); for(Instrument instrument:instruments){ System.out.println(“Instrument ID “+instrument.getID()); // using sysout as it is not prod code yet } 它只返回与匹配记录重复多次的第一条记录。 11:13:01,703 INFO [stdout] (http-/127.0.0.1:8080-1) Instrument ID 1 11:13:01,704 INFO [stdout] (http-/127.0.0.1:8080-1) Instrument ID 1 11:13:01,704 INFO [stdout] (http-/127.0.0.1:8080-1) Instrument ID 1 我在Db中有三个记录,仪器ID为1,2和3 […]

JPA Eclipselink错误的序列号

我正在使用一些映射到Oracle DB-Tables的实体。 对于ID-Generation,我使用的注释序列生成器如下: @Id @SequenceGenerator(name = “SEQ_RULES”, sequenceName = “SEQUENZ_RULES”) @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = “SEQ_RULES”) @Column(name = “SERIALNO”) protected Long serialno; 在程序执行期间,我从我的实体创建一个新实例,并希望保留这个生成的实例。 重新启动数据库后,我通过JPA-EclipseLink获取了错误的序列号,但没有通过控制台直接在数据库上。 我在persistence.xml中启用了以下属性,以获取生成的语句中使用的绑定参数。 例如:如果我生成一个我的实体的新实例并希望保留这个实例,那么我将获得2717 for serialNo并且如果我执行 SELECT SEQUENZ_RULES.NEXTVAL FROM DUAL 我得到2767作为nextval。 问题是JPA生成的serialNo必须是唯一的,现在我仍然有一些带有这个serialNo的数据集。 我得到一个例外: java.sql.SQLIntegrityConstraintViolationException: ORA-00001: unique constraint (JASON.SYS_C0084866) violated Non是否有任何缓存通过eclipse影响序列生成或可能是什么错误? 二手组件: GlassFish 3.1.1 EclipseLink 2.3.0.v20110604-r9504 数据库:Oracle版本:Oracle Database 11g 11.1.0.7.0版 – 64位 驱动程序:Oracle JDBC驱动程序版本:11.2.0.1.0 […]

如何取消正在运行的SQL查询?

我知道statement.cancel()可以用来取消正在运行的SQL查询,但我想知道的是,我将如何在另一个线程中获取此语句对象。 使用案例: 我请求启动一个运行语句的线程。 然后从一个单独的请求(另一个线程)我可能想取消这个线程。 如何在这个新请求中获取语​​句来调用其中的cancel方法。 在某些情况下,我可能会运行多个语句。 附加信息,它是一个Web应用程序,使用spring框架,hibernate和JPA。 现在在UI中有2个按钮,按钮1将触发SQL查询,按钮2必须取消该查询 我提到了这个例子,但它使用相同的线程来调用新线程,这是我无法做到的。 这是查询的启动方式: Query query = mEntityManager.createNativeQuery(globalQuery.toString()); List results = query.getResultList(); 编辑: 我能想到的一种方法是跟踪所有正在运行的语句,然后找到必须取消SQL语句的语句。

@ManyToMany关系中表的JPA 2.0 CriteriaQuery

我在@ManyToMany关系中有两个实体。 // Output has 4 other @ManyToOne relationships if that matters @Entity @Table public class Output { @Id public String address; @ManyToMany(targetEntity = Interval.class, cascade = CascadeType.ALL, fetch = FetchType.LAZY) @JoinTable(name = “output_has_interval”, joinColumns = {@JoinColumn(name = “output_address”, referencedColumnName = “address”)}, inverseJoinColumns = {@JoinColumn(name = “interval_start”, referencedColumnName = “start”), @JoinColumn(name = “interval_end”, referencedColumnName = “end”)}) […]

如何在Wildfly中部署时使用persistence.xml设置hibernate.hbm2ddl.auto

我需要为使用JPA的webapp生成部署模式。 服务器是Wildfly 9,Hibernate是JPA提供者。 我可以通过添加来实现这一点 到persistence.xml。 是否有另一种方法可以在Wildfly 9中为每个webapp和部署设置此属性? 我也尝试过hibernate.properties,但这没有效果。

如何对Entity-Bean @OneToMany关系应用默认限制

我有两个实体模型,Customer和Order。 每个客户可能有数千个订单。 我在这两个实体之间有一个OneToMany和ManyToOne关系。 如何将此关系列表仅限制为前10个订单? 是否可以在@OneToMany上应用’WHERE’条件作为属性? 喜欢: @OneToMany(“Where Order.orderNo > 100”) 我的问题是当实体管理器创建的对象所有订单都在内存中创建时。 延迟加载无法解决我的考虑,因为我需要在默认构造中获得前10个订单。