- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一套基于 Quarkus 的 REST 服务,它们利用 DynamoDB 进行数据持久化。我已经使用 DynamoDBMapper 实现了此功能,并且在 JVM 模式下运行时我的代码没有任何问题。但是,当我尝试构建并运行 native 镜像时,我收到 DynamoDB 映射错误。
我的实体代码如下所示:
@DynamoDBTable(tableName = "MyTable")
public class MyEntity {
/**
*
*/
private static final long serialVersionUID = -4532872175331494789L;
@DynamoDBHashKey(attributeName = "pk")
private String partitionKey = null;
@DynamoDBRangeKey(attributeName = "sk")
private String rangeKey = null;
...
}
我正在像这样启动时创建我的表...
AmazonDynamoDB client = ...
DynamoDB dynamoDB = new DynamoDB(client);
String accessKey = "xxx";
String secretKey = "yyy";
AWSCredentials creds = new BasicAWSCredentials(accessKey, secretKey);
AWSCredentialsProvider credProvider = new AWSStaticCredentialsProvider(creds);
DynamoDBMapper mapper = new DynamoDBMapper(client, credProvider);
CreateTableRequest req = mapper.generateCreateTableRequest(MyEntity.class);
client.createTable(req);
同样,在 JVM 模式下,此代码可以正常运行。但是,如果我构建 native 镜像并运行它,我会看到以下异常:
11:20:48 ERROR [io.quarkus.application] Failed to start application: com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMappingException: MyEntity; no mapping for HASH key
at com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapperTableModel.hashKey(DynamoDBMapperTableModel.java:119)
at com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapperTableModel$Builder.build(DynamoDBMapperTableModel.java:449)
at com.amazonaws.services.dynamodbv2.datamodeling.StandardModelFactories$StandardTableFactory.getTable(StandardModelFactories.java:107)
at com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapper.getTableModel(DynamoDBMapper.java:408)
at com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapper.generateCreateTableRequest(DynamoDBMapper.java:2268)
at com.amazonaws.services.dynamodbv2.datamodeling.AbstractDynamoDBMapper.generateCreateTableRequest(AbstractDynamoDBMapper.java:339)
at com.myapp.persistence.DynamoDBTableInitializer.observeStartup(DynamoDBTableInitializer.java:93)
at com.myapp.persistence.DynamoDBTableInitializer_Observer_observeStartup_988ebae54ee676255a64ec2d4203a1bb713ccc8e.notify(DynamoDBTableInitializer_Observer_observeStartup_988ebae54ee676255a64ec2d4203a1bb713ccc8e.zig:111)
at io.quarkus.arc.impl.EventImpl$Notifier.notifyObservers(EventImpl.java:282)
at io.quarkus.arc.impl.EventImpl$Notifier.notify(EventImpl.java:267)
at io.quarkus.arc.impl.EventImpl.fire(EventImpl.java:69)
at io.quarkus.arc.runtime.LifecycleEventRunner.fireStartupEvent(LifecycleEventRunner.java:23)
at io.quarkus.arc.runtime.ArcRecorder.handleLifecycleEvents(ArcRecorder.java:108)
at io.quarkus.deployment.steps.LifecycleEventsBuildStep$startupEvent78.deploy_0(LifecycleEventsBuildStep$startupEvent78.zig:77)
at io.quarkus.deployment.steps.LifecycleEventsBuildStep$startupEvent78.deploy(LifecycleEventsBuildStep$startupEvent78.zig:36)
at io.quarkus.runner.ApplicationImpl.doStart(ApplicationImpl.zig:285)
at io.quarkus.runtime.Application.start(Application.java:87)
at io.quarkus.runtime.Application.run(Application.java:210)
at io.quarkus.runner.GeneratedMain.main(GeneratedMain.zig:41)
我的 HASH 键清楚地映射在我的实体类中,所以我不知道为什么会收到此错误。任何人都可以推荐任何故障排除提示或提供对正在发生的情况的任何见解吗?
最佳答案
您需要注册反射类才能在 native 模式下工作:
@RegisterForReflection
@DynamoDBTable(tableName = "MyTable")
public class MyEntity {
<小时/>
参见:
When building a native executable, GraalVM operates with a closed world assumption. It analyzes the call tree and removes all the classes/methods/fields that are not used directly.
The elements used via reflection are not part of the call tree so they are dead code eliminated (if not called directly in other cases). To include these elements in your native executable, you need to register them for reflection explicitly.
关于java - Quarkus 和 DynamoDBMapper - native 构建上的 "no mapping for HASH key",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60530529/
我的数据库表由多行组成,其 id 是唯一的。 API(Endpoint) -> 获取 id 的行我正在传递输入数组 (id1,id2,id3,id4) Question : In DynamoDBMa
我正在尝试使用 Java API 在 DynamoDB 中创建表。 问题:它只在表中创建哈希键索引,没有其他属性。 private void createTable(DynamoDBMapper ma
在低级 API 上使用 DynamoDBMapper 是否会影响性能?我想性能开销会很小甚至微不足道,但我无法在网上找到任何这样的引用资料。 在线示例还显示了在 POJO 本身上使用的映射器注释。这是
我正在尝试将我的 Android 应用程序连接到 AWS DynamoDB,但我无法创建 DynamoDBMapper 对象并导入该库: import com.amazonaws.mobileconn
我试图根据两个不同列的组合使表中的项目保持唯一。 我有一个 instanceId 和 imageId 列(以及其他列),并且基于 Stackoverflow 上的几篇文章和 AWS Forums以下应
使用 Java DynamoDBMapper,我如何才能仅在对象不存在时保存它(基于主键)。如果确实存在,我希望抛出异常或失败,而不是更新现有条目。 最佳答案 我相信你应该能够用 DynamoDbSa
我在 Amazon 的 AWS 工具包中遇到基于 Java 的 DynamoDBMapper 问题,抛出“无法实例化类”异常错误。这是我第一次尝试使用 DBMapper,所以我不确定我是否已正确设置所
我正在使用 DynamoDBMapper,当且仅当散列键和范围键组合不存在时,我想有条件地保存。我知道有一些方法可以使用 UUID 来减少碰撞的可能性,但我想通过使用条件保存来保护自己。 我遇到了 t
我正在使用散列键查询 DynamoDB 表。表中的每条记录由哈希键和范围键唯一标识 DynamoDBMapper mapper; .... MyClass myClass = new MyClass(
我正在研究一种保存到 DynamoDB 的方法。如果表中不存在该值,我希望该方法能够保存。如果确实存在,我想应用条件更新。我正在使用 DynamoDBMapper 的保存方法。 我目前的代码成功地进行
这是我想测试的一段代码 ... DynamoDBQueryExpression queryExpression = createQueryForLatestOrders(orderId, storeI
当我尝试从 DynamoDB 表获取一组分页数据时,它可以正常工作,但前提是它要查找的数据位于表的顶部。如果它更深入(我按 user_alias 排序数据,每个别名有 100 个元素),它不会返回任何
我在 Amazon DynamoDB 中有一个员工表(即项目)。该表的属性是 {employee_id, name, manager_id} 该类在 Java 中使用以下方式表示: @DynamoDB
我刚刚开始我的第一个 DynamoDB 项目,我一直在尝试尽可能多地阅读文档。我认为我的项目的最佳可能性是在 SDK 中使用高级 DynamoDbMapper 以允许 CRUD 操作。 在 Dynam
当您想要以下条件时,是否可以使用 DynamoDB 映射器进行有条件的写入/更新:如果属性不等于 X 则写入?我想做一个有条件的写,做这样的事情: DynamoRecord record = mapp
我已经开始使用 DynamoDB 并在 DynamoDBMapper 上看到了这条指令 http://aws.amazon.com/articles/0802321832592496 假设我有一个用户
我在 Scala 中有以下 DynamoDB 项目 @DynamoDBTable(tableName = Table) class DynamoItem { private var indexId
我想从 Dynamo DB 表中获取所有记录,并将它们映射到一个 POJO 数组中; POJO 很简单并且已经注释了。 DynamoDBMapper 似乎是将执行提取以获取记录并将它们反序列化到我的
DynamoDBMapper 提供了从 Map 构建对象的方法 JavaDoc : public T marshallIntoObject(类 clazz, map 项属性, DynamoDBMapp
在用 Kotlin 编写的 AWS Lambda(即不是 Android)中使用 DynamoDBMapper,我可以使用数据类保存记录。但是,当我尝试将记录加载到数据类时,我收到“DynamoDBM
我是一名优秀的程序员,十分优秀!