`
liugh1974
  • 浏览: 20484 次
  • 来自: ...
社区版块
存档分类
最新评论

JPA(Hibernate实现) 自动生成有关联的UPDATE语句问题

    博客分类:
  • JAVA
阅读更多
今天写JPA的CRUD时,在测试UPDATE时,出现一个奇怪的问题,即当要更新的Entity有关联表且在更新条件中有关联表的条件时,出现生成的SQL语句语法异常:

示例代码如下:

Table1.

......

@Entity
@Table(name = "subscriber")
public class Subscriber implements Serializable {

        ......

@Id
@GeneratedValue
private Long id;

@Column(name = "phone_number", unique = true)
private String phoneNumber;

//@Id
@Column(name = "device_id", unique = true)
private Integer deviceID;
   
       ......


Table2:

......

@Entity
@Table(name = "directory")
public class Directory implements Serializable {

@Id
@GeneratedValue
private Long id;

        ......

@Column(name = "status")
@Enumerated(EnumType.STRING)
private Status status;

@ManyToOne(cascade=CascadeType.ALL)
@JoinColumn(name = "subscriber_id" )
private SAICSubscriber subscriber;

}

当执行如下更新时:

String queryString = "UPDATE Directory d SET d.status=:status WHERE d.subscriber.deviceID=:deviceID";

Query query = entityManager.createQuery(queryString);
......

打印生动生成的sql语句为:
update directory,  set status=? where device_id=?

注意:在directory 和 set前有一个逗号,这是一个错误的sql语句。

修改 Subscriber ,用DeviceID作为主键后,把自增ID去掉,其它什么都不用修改,就一切正常了。

即Update时,当有被关联表的条件时,被关联的条件必须是被关联表的主键才行。
这样的话感觉在执行Update时非常的别拗。

也许是我有什么地方没有搞对,但这样修改后确实就可以运行了。


分享到:
评论

相关推荐

    jpa代码自动生成工具-springboot

    本文将深入探讨如何使用JPA和Spring Boot结合,实现代码自动生成工具,提高开发效率。 首先,让我们了解JPA。JPA通过提供一套标准API,使得开发者无需关注底层SQL语句,而是通过定义实体类、注解以及Repository接口...

    spring-jpa(hibernate实现)环境搭建

    Hibernate是JPA的一个实现,它是一个强大的对象关系映射(ORM)工具,能够将Java对象与数据库表进行映射,使得开发者可以使用面向对象的方式来处理数据库操作,而无需直接编写SQL语句。本文将详细介绍如何使用...

    model自动生成对应crud sql语句

    标题中的“model自动生成对应crud sql语句”指的是在软件开发过程中,利用特定的工具或框架,通过定义数据模型(Model)自动生成功能齐全的CRUD(Create, Read, Update, Delete)SQL语句的技术。这种方法可以显著...

    springboot利用jpa连接hibernate

    spring.jpa.hibernate.ddl-auto=update ``` 接着,创建Repository接口。Spring Data JPA会自动实现这些接口,提供CRUD操作。例如: ```java import org.springframework.data.repository.CrudRepository; public ...

    根据hibernate反向生成数据库的java代码

    Hibernate的逆向工程工具,也被称为Hibernate Tools,能够从现有的数据库结构自动生成对应的Java持久化类(Entity)、Hibernate配置文件(hibernate.cfg.xml)以及映射文件(.hbm.xml)。这样,开发者可以快速地...

    Hibernate JPA

    - `hibernate.dialect`: 定义了特定的数据库方言,用于生成符合该数据库的SQL语句。 - `hibernate.connection.*`: 设置数据库连接的相关属性。 - `hibernate.max_fetch_depth`: 控制最大加载深度。 - `hibernate...

    hibernate4使用JPA所需要的jar包

    当Hibernate4与JPA结合使用时,可以充分利用Hibernate的强大功能并遵循JPA规范,实现灵活且标准的持久层解决方案。 首先,让我们深入了解一下Hibernate4。Hibernate4是Hibernate ORM的第四个主要版本,它引入了许多...

    JPA + Hibernate 3 CRUD操作历史审计日志的解决方案

    Hibernate作为JPA的一个流行实现,进一步增强了其功能。然而,随着业务的发展,有时我们需要记录这些CRUD操作的历史,以便进行审计或回溯,这就是“历史审计日志”功能。这篇博客"JPA + Hibernate 3 CRUD操作历史...

    How to Use Hibernate JPA

    ### 如何使用 Hibernate JPA #### 文件摘要 本文件旨在通过一个简单的实例向读者介绍如何在Eclipse 3.4环境中使用...这不仅有助于理解Hibernate JPA的基本概念和技术细节,也为实际项目开发提供了很好的参考。

    Hibernate方法的实现

    它实现了JPA(Java Persistence API),使得开发者无需关心底层的SQL语句,只需操作Java对象即可完成数据库的CRUD(创建、读取、更新、删除)操作。 2. **Hibernate的配置** 在使用Hibernate前,我们需要配置...

    Hibernate生产SQL语句

    本文将深入探讨如何模仿Hibernate生成SQL语句,以及如何利用Java反射技术来实现这一过程。 首先,我们需要理解Hibernate的工作原理。Hibernate的核心在于它的Query API,它提供了Criteria、HQL(Hibernate Query ...

    使用JPA中@Query 注解实现update 操作方法(必看)

    在Java Persistence API (JPA)中,`@Query`注解是用于自定义查询的一种方式,它可以让我们在Repository接口中直接编写SQL或者HQL(Hibernate Query Language)来执行数据库操作。在本例中,我们将详细探讨如何使用`@...

    hibernate实现增删改查

    **hibernate实现增删改查** Hibernate 是一个强大的Java持久化框架,它极大地简化了数据库操作,使得开发者可以更加专注于业务逻辑而不是繁琐的数据管理。本文将深入探讨如何使用Hibernate来实现数据库的增删改查...

    SpringDataJpa开发--继承JpaRepository实现简单条件查询

    spring.jpa.hibernate.ddl-auto=update ``` 3. **创建Repository接口**:创建一个接口,继承`JpaRepository`,并指定实体类和主键类型。你可以在这个接口中添加自定义方法。例如: ```java public interface ...

    springboot+jpa+thymeleaf实现简单增删改查

    - 激活JPA支持,设置`spring.jpa.hibernate.ddl-auto`属性,如`create-drop`或`update`。 3. **定义实体类(Entity)** - 创建一个Java类,代表数据库中的表。使用`@Entity`注解标记实体类,`@Id`注解指定主键...

    spring-data-jpa-1.1.0.RELEASE

    例如,你可以定义一个UserRepository接口,其中包含find、save、delete等操作,Spring Data JPA会自动生成对应的SQL语句执行这些操作。 在1.1.0.RELEASE版本中,Spring Data JPA提供了以下主要特性: 1. 自动查询...

    spring-boot 集成hibernate

    2. **Hibernate**: 是一个Java语言下的对象关系映射(ORM)框架,它提供了将Java类与数据库表之间的映射,以及SQL语句的自动生成和执行。Hibernate使得开发者能够更专注于业务逻辑,而不是数据库操作。 3. **Druid*...

    关于SH JPA 简单的CRUD操作

    在本教程中,我们将深入探讨SH JPA如何进行简单的创建(Create)、读取(Read)、更新(Update)和删除(Delete)操作,同时结合Hibernate作为JPA的实现,并使用Restful风格的API来完成这些操作。 1. **创建...

    Spring-JPA

    开发者只需要定义自己的Repository接口,继承Spring提供的JpaRepository或CrudRepository接口,然后Spring会自动为我们生成实现,无需编写实体类的DAO层代码。 2. **Entity**: Entity是JPA中的核心概念,代表数据库...

    hibernate的相关jar包

    在开发过程中,有时我们需要查看Hibernate根据实体类自动生成的建表语句,这通常是为了调试或确认数据库结构。可以通过以下步骤实现: 1. 在Hibernate的配置文件(`hibernate.cfg.xml`)中启用SQL日志输出: ```...

Global site tag (gtag.js) - Google Analytics