标签: spring-data-jdbc

Spring Data JDBC/Spring Data JPA vs Hibernate

什么是典型的现实生活场景,人们会选择Spring Data JDBC/Spring Data JPA vs Hibernate?我想了解其中任何一种实现最适合的场景.

hibernate spring-data spring-data-jpa spring-data-jdbc

11
推荐指数
2
解决办法
2万
查看次数

为什么Spring-data-jdbc没有保存我的Car对象?

我正在玩spring-data-jdbc并发现了一个问题,我用谷歌无法解决.

无论我尝试做什么,我都无法将一个简单的对象推入数据库(Bean1.java:25): carRepository.save(new Car(2L, "BMW", "5"));

两个,没有一个和一个TransactionManager + @Transactional数据库(显然)不提交记录.

该代码基于Postgres数据库,但您也可以简单地使用下面的H2并获得相同的结果.

这是(简约)源代码:https: //github.com/bitmagier/spring-data-jdbc-sandbox/tree/stackoverflow-question

有人能告诉我,为什么汽车没有插入数据库?

java insert spring-data-jdbc

8
推荐指数
1
解决办法
1568
查看次数

spring-jdbc vs spring-data-jdbc以及它们支持的内容

我很好奇spring-jdbc(我在最新的spring发行版中遗漏的内容)和spring-data-jdbc之间的区别是什么.
有没有区别或只是重命名(在存储库中我没有看到这个)?

是否在某处描述了版本支持的目标(DB/JDBC规范/ JDK)?

例如,对于来自oracle的普通JDBC,我可以在这里看到这些信息:http: //www.oracle.com/technetwork/database/enterprise-edition/jdbc-faq-090281.html#01_03_1
(例如:ojdbc7中的JDBC Spec 4.1. Oracle DB 12.1/12cR1上的Java7/Java8上的jar

但我想念spring-jdbc - 我在哪里可以找到这些信息?

java spring jdbc spring-jdbc spring-data-jdbc

8
推荐指数
1
解决办法
4076
查看次数

复合键和 spring-data-jdbc

我有一个使用复合键的数据库。是否可以使用 spring-data-jdbc?我尝试了里程碑版本 1.1M2,其中我以以下方式映射了我的实体:

class History {

   @ID
   @Embedded
   private CompositeHistoryID  id;
}
Run Code Online (Sandbox Code Playgroud)

然后在我的存储库类中,我添加了

HistoryRepository extends Repository<History,CompositeHistoryID  >{
   History  findByhId(CompositeHistoryID  id)
}
Run Code Online (Sandbox Code Playgroud)

我跟踪了SQL,它没有用。嵌入部分有效,但 where 子句不正确。它使用单个参数持有者而不是具有常规复合键结构,其中 element1=subkey1 和 element2=subkey2 等等......

我有两个问题。有什么方法可以使复合 ID 工作吗?

第二个问题是,让我们假设我使用自定义@Query的顶部findByID将保存方法下班后,如果?什么是完全没有ID,如果我只是随机选择一个列并说你将成为我的ID怎么办?

java spring jdbc spring-data spring-data-jdbc

8
推荐指数
1
解决办法
3124
查看次数

使用 Spring Data JDBC 和 CrudRepository 接口的多个数据源

我有一个重要的问题:

我的情况:

  • 使用Spring Data JDBC
  • 使用两个数据库
  • 的用法 CrudRepository

正如你可以看到这里春天JDBC数据可以extends CrudRepository与获得春天所有CRUD操作开箱-没有明确的执行!

这是一个简单的 4 步过程:

  1. 定义你的属性
  2. 定义你的实体
  3. 定义一个扩展 CrudRepository 的接口和
  4. 使用该接口

但是在使用两个数据库的情况下,有一个 5. 步骤,您必须在其中定义一个@Configuration类。

我做了这5个步骤如下:

0. pom.xml

 <dependencies>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-data-jdbc</artifactId>
    </dependency>
    <dependency>
      <groupId>com.h2database</groupId>
      <artifactId>h2</artifactId>
      <scope>runtime</scope>
    </dependency>
    <dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
      <optional>true</optional>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-test</artifactId>
      <scope>test</scope>
      <exclusions>
        <exclusion>
          <groupId>org.junit.vintage</groupId>
          <artifactId>junit-vintage-engine</artifactId>
        </exclusion>
      </exclusions>
    </dependency>
  </dependencies>
Run Code Online (Sandbox Code Playgroud)

1. 定义你的属性

应用程序属性

## D1
datasource.db1.driverClassName=...
datasource.db1.username=...
datasource.db1.password=...
datasource.db1.jdbcUrl=...
## D2
datasource.db2.driverClassName=...
datasource.db2.username=...
datasource.db2.password=...
datasource.db2.jdbcUrl=...
Run Code Online (Sandbox Code Playgroud)

2. 定义你的实体(每个数据库一个) …

spring spring-boot spring-data-jdbc

8
推荐指数
1
解决办法
4177
查看次数

使用 CrudRepository.save(Entity) 使用 spring-data-jdbc 插入具有预定义 @ID 字段的实体

我用来CrudRepository.save(Entity)插入一个@ID已经填充的实体。

我收到以下异常。

Caused by: org.springframework.dao.IncorrectUpdateSemanticsDataAccessException: Failed to update entity [com.comanyname.repository.Entiy.class]. Id [ed384316-9c22-4b63-90fd-ec02fdac2b86] not found in database.
Run Code Online (Sandbox Code Playgroud)

我可以理解这个问题,因为 @ID字段已经填充,这里的AggregateChangeExecutor将此操作视为 DbAction.Update。

所以,我想知道是否有任何方法可以用来CrudRepository.save(Entity)插入带有预定义字段的新实体@ID,因为我想@DomainEvent在 CrudRepository.save(Entity) 上使用钩子。

我感觉这是一个错误spring-data-jdbc。只是想在这里提出意见/解决方案。

java postgresql spring spring-data-jdbc

8
推荐指数
1
解决办法
7152
查看次数

如何调整 Spring Data JDBC 的 NamingStrategy

我如何调整 Spring Data JDBCNamingStrategy使其行为像 Hibernate\xc2\xb4s PhysicalNamingStrategy
\n我有以下实体:

\n\n
/**\n * Campus domain model class.\n * Handles information about campus.\n *\n * @author thomas.lang@th-deg.de\n */\n@Data\n@AllArgsConstructor(access = AccessLevel.PRIVATE, onConstructor = @__(@PersistenceConstructor))\npublic class Campus {\n\n    private final @Id\n    @Wither\n    long campusId;\n\n    @NotNull\n    @Size(min = 3)\n    private String campusName;\n\n    /**\n     * Creates a new campus.\n     *\n     * @param campusName\n     */\n    public Campus(@NonNull String campusName) {\n        this.campusId = 0;\n        Assert.hasLength(campusName, "A valid value has to be provided for Campus!");\n        this.campusName = campusName;\n …
Run Code Online (Sandbox Code Playgroud)

spring-data spring-data-jdbc

7
推荐指数
1
解决办法
3023
查看次数

R2DBC、Spring Jdbc、Spring Data JDBC?

关于使用 Spring JDBC,它工作得非常好,并且在使用批处理时比 JPA 有一些改进。

我很想了解当您已经拥有Spring Data JDBC 时为什么要使用 Spring Data JDBC

我很想了解当您已经拥有Spring JDBC时为什么要使用R2DBC

spring spring-jdbc spring-data-jdbc r2dbc

7
推荐指数
2
解决办法
8117
查看次数

如何使用 spring-data-jdbc 读取/写入 postgres jsonb 类型?

我尝试将以下内容与 spring-data-jdbc 和 postgres 驱动程序(kotlin)一起使用,

data class MyEntity(
  val id: UUID,
  val content: String
)
Run Code Online (Sandbox Code Playgroud)

使用字符串失败并出现以下错误,

org.postgresql.util.PSQLException: ERROR: column "content" is of type jsonb but expression is of type character varying
  Hint: You will need to rewrite or cast the expression.
  Position: 31
Run Code Online (Sandbox Code Playgroud)

我不确定如何使用 String -> jsonb 转换器

postgresql jdbc spring-data spring-boot spring-data-jdbc

6
推荐指数
1
解决办法
1万
查看次数

在 Spring Data R2DBC 中设计一对一和一对多关系

我正在探索在使用 Spring Data R2DBC 时设计一对一和一对多关系时可能的想法。

由于 Spring Data R2DBC 本身仍然不支持关系,因此仍然需要我们自己处理这些关系(与 Spring Data JDBC 不同)。

我想象的是,当涉及到一对一映射时,实现可能如下所示:

@Table("account")
public class Account {
    
    @Id
    private Long id;
    
    @Transient // one-to-one
    private Address address;
    }
Run Code Online (Sandbox Code Playgroud)
@Table("address")
public class Address {
    
    @Id
    private Integer id;
}
Run Code Online (Sandbox Code Playgroud)

而数据库模式定义如下:

--address
CREATE TABLE address
(
    id                  SERIAL PRIMARY KEY
)
    
--account
CREATE TABLE account
(
    id                     SERIAL PRIMARY KEY,
    address_id             INTEGER REFERENCES address(id)
)
Run Code Online (Sandbox Code Playgroud)

由于该Account对象是我的聚合根,我想我应该Address按照 Jens Schaduer 的建议加载该对象:

聚合是形成一个单元的一组对象,它应该始终保持一致。此外,它应该始终被持久化(并加载)在一起。来源:Spring Data JDBC、参考资料和聚合

这让我想到,在像这样的一对一关系的情况下,我实际上应该Account …

spring-boot spring-data-jdbc spring-data-r2dbc r2dbc

6
推荐指数
1
解决办法
5503
查看次数