JPA在将Cassandra Java实体Map到带有snake大小写的表名时出现问题

vc9ivgsu  于 2022-11-05  发布在  Cassandra
关注(0)|答案(2)|浏览(135)

我正在使用以下驱动程序。

implementation 'com.datastax.astra:astra-spring-boot-starter:0.3.0'
implementation 'com.datastax.oss:java-driver-core:4.14.1'
implementation 'com.datastax.oss:java-driver-query-builder:4.14.1'
implementation 'com.datastax.oss:java-driver-mapper-runtime:4.14.1'
implementation 'org.springframework.boot:spring-boot-starter-data-cassandra'

以下是我的实体:

@NamingStrategy(convention = NamingConvention.SNAKE_CASE_INSENSITIVE)
@CqlName("engine_torque_by_last_miles")
@Entity
public class EngineTorqueByLastMiles {

    private UUID id;

    @PartitionKey(1)
    private String vinNumber;
}

下面是我的存储库:

public interface EngineTorqueByLastMilesRepository extends CassandraRepository<EngineTorqueByLastMiles, String> {
    List<EngineTorqueByLastMiles> findAllByVinNumberAndOrganizationId(String vinNumber, Integer organizationId);
}

我所面临的问题是soring.data.jpa.cassandra没有将实体名称或属性Map到snake_case,即使在使用了datastax驱动程序中的NamingStrategy或CqlName注解之后也是如此。
datastax是否提供任何支持jpa的驱动程序,以便我可以用典型的java命名约定和cassandra表或带有snake_case的属性来编写我的实体及其属性?

bvjveswy

bvjveswy1#

Datastax确实提供了一种将对象Map到Cassandra表的方法,它被称为Cassandra对象Map器。文档在这里https://docs.datastax.com/en/developer/java-driver/4.13/manual/mapper/但您不需要它。
看一下你的代码,你似乎想使用Spring Data Cassandra。这完全没问题。你只是没有使用正确的注解集。你应该使用Spring Data 注解。
您的Bean变为:

@Table("engine_torque_by_last_miles")
public class EngineTorqueByLastMiles {

    @PrimaryKeyColumn(name = "vin_number", ordinal = 0, type = PrimaryKeyType.PARTITIONED)
    private String vinNumber;

    @Column("id")
    @CassandraType(type = Name.UUID)
    private UUID id;

    // default constructor
    // getters
    // setters
}
  • 根据表名,分区键应该是last_miles,但问题中没有提供。
  • 您提供了一个id,但没有注解它,我还以为它不是主键的一部分。如果您有一个包含分区键和簇列的组合主键,则需要为PK创建一个另一个内部bean,并使用@PrimaryKeysample)对其进行注解。

您可以在这里找到一个完整的工作应用程序,其中包含多个实体https://github.com/datastaxdevs/workshop-betterreads/tree/master/better-reads-webapp
如果您编辑或完成您的问题,我们可以建议确切的豆子需要。

8e2ybdfx

8e2ybdfx2#

请尝试设定属性:

spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl

因为Hibernate 5是默认的,您将获得蛇式命名。
有关详细参考信息,请参阅此处的文档

相关问题