Tag: jpa

使用JPA更新数据库中的记录的问题

我在数据库中有对象,其值如下: id = 1 name =“john” chargeid = 6 我使用merge语句更新代码em.merge(obj) 当我看到JPA生成的查询时,我发现在更新查询中,只更新具有新值或非空值的字段。 我检查了与此对象关联的bean,发现没有与chargid关联的注释 现在,当我尝试更新此JPA时,如果我没有将anyvalue设置为null,它会得到正确更新。 现在,如果我设置chargeid = null然后尝试将其设置为持久化为db,它会在db中更改为null但它会将零售值保留为先前的值。如何? 以下是在数据库中记录的详细信息如下 ID Name chargeID 1 john 5 现在,如果我将对象的值设置为 obj.setID(1), obj.setName(“johnNew”) obj.setchargID(6) entinymanager.merge(obj) 然后记录更新如下,这很好 Id name chargeid 1 johnNew 6 现在如果我想将chargeid设置为null我使用代码 obj.setId(1) obj.setName(‘XYZ’) obj.setChargeId(null); // i want to update it as null. 现在记录将更新如下 id name chargeid 1 XYZ 6 //name […]

Hibernate在单个表中对复合外键和主键进行一对一映射

我有一个Catagory表,带有复合主键和外键。 我的表结构就像 CREATE TABLE CATAGORY ( CATAGORY_ID int(11) NOT NULL, CATAGORY_NAME varchar(50) DEFAULT NULL, VERSION int(11) NOT NULL, PARENT_ID int(11) DEFAULT NULL, PRIMARY KEY (CATAGORY_ID,VERSION) ); ALTER TABLE CATAGORY ADD CONSTRAINT FOREIGN KEY (PARENT_ID, VERSION) REFERENCES CATAGORY (CATAGORY_ID, VERSION); 我想要像这样的Catagory类进行ORM映射 public class Catagory { @EmbeddedId private CatagoryPk pk ; @Column(name=”CATAGORY_NAME”) private String catagoryName; private Catagory […]

容器管理事务无法回滚

我正在玩交易。 我配置JPA来处理我的实体,并希望将它们保存在数据库中。 问题是,当我的程序抛出runtimeException时,CMT不会回滚。 这个“容器事物”背后的想法很难理解,而且记录很少。 @transactional托管事务,纯CDI Interceptor托管事务和Bean管理事务就像一个魅力。 这是我编码的内容:这是一个简单的“电影演示”。 你想看两部带X座位的电影。 座位有限。 如果电影中的座位不足,则不应该有交易(ACID和东西) 在我的buyTicketsBoundary类: 起初我告诉我的class级我们正在使用CMT: @Named(“buchungBoundry”) @RequestScoped @TransactionManagement(TransactionManagementType.CONTAINER) public class BuchungBoundry { @EJB private BuchungVerwaltung buyTicketsController; @EJB private KundenVerwaltung customerController; @EJB private SaalVerwaltung roomController; @EJB private MovieVerwaltung movieController; private int ticketsForMovie1; //this is how many tickets we want to buy private int ticketsForMovie2; public BuchungBoundry() { } @TransactionAttribute(TransactionAttributeType.REQUIRED) […]

两个相关JPA实体之间的接口

场景如下(显示的表格) Delivery table —— id channelId type 10 100 fax 20 200 email Fax table —- id number 100 1234567 101 1234598 Email table —– id email 200 a@a.com 201 b@b.com 基本上是交付和渠道实体之间的一对一关系,但由于每个具体渠道(传真,电子邮件)都有不同的成员,我想在两个实体之间创建一个通用接口(通道),并将其用于@OneToOne关系。 在我看来这是一个简单的场景,你们很多人可能已经经历过,但我无法成功。 我试过把那个targetEntity的东西但没有用。 仍然说“交付引用一个未知的实体” 有任何想法吗? 提前致谢

如何让Hibernate Tools用toString,equals和hashcode生成POJO?

用于eclipse的Hibernate Tools插件(版本3.2.4) 大家好, 我正在使用插件从我的DB-Schema中反向设计我的POJO和DAO,并且由于某种原因,在POJO中没有创建toString,equals和hashcode方法。 我正在做的是以下内容:创建一个新的JPA项目。 配置它的persistence.xml文件,如下所示: org.hibernate.ejb.HibernatePersistence false 创建了一个hibernate.reveng.xml文件,只在我的目录中选择我的dbo scehma。 然后创建一个类型为JPA的Hibernate控制台配置和从JPA配置获取的连接,最后配置持久性单元。 使用Hibernate代码生成配置创建一个新配置,我在其中启用了“从JDBC连接反向工程”,定义了输出目录,包和reveng文件。 此外,我检查了该选项卡中的所有复选框(除了使用自定义模板)。 在我使用的导出器选项卡中: 1.使用Java 5语法。 2.生成EJB3注释。 并使用“域代码”和“DAO代码”导出器。 这很好(在解决了DTP插件兼容性的一些问题之后)。 主要问题是我在Pojo.ftl中看到以下表达式: 在PojoToString.ftl我看到: 我在哪里可以设置这个属性? 我希望我的所有pojos都需要toString,equals和hashcode? 先感谢您

JPA:如何自动生成影子表(历史记录)

我正在使用EclipseLink的历史记录function 。 据我所知,目前还没有实际创建影子表的支持 。 我正在为所有基表使用JPA 2.1自动化模式生成。 工作良好。 现在我正在寻找一种自动化创建影子表的方法。 对于每个基表,应该有一个带有一些额外列的影子表。 否则,影子表具有正在遮蔽的表的确切结构。 我在模型中有超过50个实体,并且在其中抛出了一些多对多关系,所有映射到大约55个物理表。 我不想为所有影子表维护DDL创建脚本。 现在该项目与数据库无关(至少对于通常的嫌疑人而言),我想保持这种方式。 绑定到EclipseLink不是问题所以EclipseLink特定的解决方案是可以的。 那么,如何创建影子表呢? 可以使用子类来表示每个历史表。 假设基类是Car ,那么: @Entity @Table(name=”CAR_HIST”) public class ClassHist extends Car { … // some extra audit fields here } 并且在Car上使用@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)注释它实际上将使用JPA模式生成来完成工作。 所以,几乎就是这样。 除了没有实体的多对多关系表,我可以得到实际操作,因此无法获得为关系表生成的影子表。 UPDATE 原来使用inheritance来创建影子表并不是一个好主意。 原因是JPA JPQL查询是多态的 。 这意味着像SELECT a FROM Car这样的查询实际上也会进入CAR_HIST表,因为CarHist只是Car一个子类。 从这些表中获取SELECT的UNION。 显然不想要我想要。 它不是一个好主意的另一个原因是用于历史的子类将inheritance其父级的主键。 这也是完全错误的。 更新2 我发现EclipseLink中有这个function的RFE 。

GWT JPA – 响应无法反序列化

我使用GWT和JPA来持久化。 我已经创建了一个域JPA enchanted类,DAO和RPC用于它们之间的通信。 一切正常,通过RPC客户端将对象发送到服务器但无法得到响应。 服务器无法以与客户端兼容的方式反序列化。 所以我不能使用服务器callBack回到客户端。 exception消息是这样的: 无法对响应进行反序列化,com.google.gwt.user.client.rpc.SerializationException 这是我的一个类的示例代码: @Entity @Table(name=”course”) public class Course implements Serializable { private static final long serialVersionUID = 1L; private int courseId; private String name; private List groups; private List modules; public Course() { } @Id @GeneratedValue(strategy=GenerationType.IDENTITY) @Column(unique=true, nullable=false) public int getCourseId() { return this.courseId; } public void setCourseId(int courseId) […]

使用JPA进行更新的最佳方法

使用JPA我应该在更新时遵循哪种方法? 方法1 obj o = new obj() o.setName(‘val’) set other values entitymanger.merge(ibj) 方法2 obj o = getObjFromDb(obj) obj.setval(name) //not am not updating other attributes entitymanage.merge(obj)

用于RESTful服务的自动类生成器

我拥有的,我有一个DB模式,有10个表和表之间的基本关系(一对一,一对多)。 我需要的是,我需要创建webservices来访问这个数据库数据(让我们忽略现在的业务逻辑层)和基本的CRUD操作 我所知道的,我知道我们有JPA来生成实体,而jackson在json和POJO类之间进行映射。 现在有一个工具,它将DB Schema作为输入并生成RESTful服务类,带有jackson注释的JPA实体 注意:我们可以使用Spring来实现其中的大部分function。 但我不想出于各种其他原因使用Spring或任何J2EE框架。

在网络应用程序中放置META-INF / services / java.sql.Driver的位置

javadoc说“要加载my.sql.Driver类,META-INF / services / java.sql.Driver文件将包含条目:my.sql.Driver”。 Web应用程序通常没有META-INF文件夹作为WEB-INF的兄弟吗? 但是,JPA规范正在WEB-INF / classes / META-INF /中寻找persistence.xml。 哪个地方对于services / java.sql.Driver是正确的? 顺便说一句,我在这两个地方都得到了“No suitable Driver”例外。