- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 dropwizard,我想构建一个在实体中具有各种外键关系的 REST 应用程序。
例如,给出以下 3 个表:
-- table persons
CREATE TABLE PUBLIC.PERSONS(
ID BIGINT DEFAULT NOT NULL AUTOINCREMENT,
FIRST_NAME VARCHAR(255),
LAST_NAME VARCHAR(255),
BIRTHDAY DATE,
ADDRESS_ID BIGINT NOT NULL,
CREATED TIMESTAMP DEFAULT 'current_timestamp',
MODIFIED TIMESTAMP
);
ALTER TABLE PUBLIC.PERSONS ADD CONSTRAINT PUBLIC.PK_PERSONS PRIMARY KEY(ID);
-- table customers
CREATE TABLE PUBLIC.CUSTOMERS(
ID BIGINT DEFAULT NOT NULL AUTOINCREMENT,
PERSON_ID BIGINT NOT NULL,
STATUS_CODE VARCHAR(100) DEFAULT 'ACQUISITION' NOT NULL,
CREATED TIMESTAMP DEFAULT 'current_timestamp',
MODIFIED TIMESTAMP
);
ALTER TABLE PUBLIC.CUSTOMERS ADD CONSTRAINT PUBLIC.PK_CUSTOMERS PRIMARY KEY(ID);
-- table addresses
CREATE TABLE PUBLIC.ADDRESSES(
ID BIGINT DEFAULT NOT NULL AUTOINCREMENT,
LINE_1 VARCHAR(255),
LINE_2 VARCHAR(255),
ZIP VARCHAR(255),
CITY VARCHAR(255),
COUNTRY_CODE VARCHAR(3),
PHONE VARCHAR(255),
FAX VARCHAR(255),
CREATED TIMESTAMP DEFAULT 'current_timestamp',
MODIFIED TIMESTAMP
);
ALTER TABLE PUBLIC.ADDRESSES ADD CONSTRAINT PUBLIC.PK_ADDRESSES PRIMARY KEY(ID);
-- and following forign key constraints:
ALTER TABLE PUBLIC.PERSONS ADD CONSTRAINT
PUBLIC.FK_PERSON_ADDRESS FOREIGN KEY(ADDRESS_ID)
REFERENCES PUBLIC.ADDRESSES(ID) ON DELETE SET NULL NOCHECK;
ALTER TABLE PUBLIC.CUSTOMERS ADD CONSTRAINT
PUBLIC.FK_CUSTOMER_PERSON FOREIGN KEY(PERSON_ID)
REFERENCES PUBLIC.PERSONS(ID) ON DELETE SET NULL NOCHECK;
我已经开始实现一个 customerDAO,它使用一个 SQL 查询读取客户表和引用表的数据,这并不是很复杂:
@RegisterMapper(CustomerResultMapper.class)
public interface CustomerDAO {
@SqlQuery("select p.id as person_id, "
+ "p.first_name, p.last_name, p.birthday, "
+ "c.id as customer_id, c.status_code, "
+ "a.id as address_id, a.line_1, a.line_2, a.zip, "
+ "a.city, a.country_code, a.phone, a.fax "
+ "from customers c, persons p, addresses a "
+ "where c.id = :id "
+ "and c.person_id = p.id "
+ "and p.address_id = a.id")
public Customer findCustomerById(@Bind("id") long id);
}
(为了简洁起见,我跳过了映射器,因为这不是我的实际问题)
现在我想插入一个新客户,我拥有所有必需的数据,包括属于引用表中的数据。
我找不到一种方法如何使用 jdbi 注释执行多个查询,所以我想,我必须为每个表创建一个 DAO 方法,并从 java 中插入数据,手动更新外键引用。
但这也不起作用,因为我找不到在插入后读取自动生成的 ID 值的方法。
知道如何解决这个问题以便保持引用正确吗?
最佳答案
没关系,我同时找到了解决方案,至少如何获取自动生成的 key :
在您的 DAO 中,添加 @GetGenerateKeys 注释,确保该方法的返回值与生成的 key 的值匹配:
@SqlUpdate("insert into addresses (line_1) values ('address line 1')")
@GetGeneratedKeys
public long insertAddress();
然后在您的资源中,您可以简单地使用返回值:
long id = customerDAO.insertAddress();
System.out.println("Found id " + id);
这可以获取一个语句的生成 key ,但就我而言,我仍然需要进行多个查询并手动填写正确的引用。
如果有人知道我如何简化此过程并自动填写引用文献,我仍然有兴趣了解。
谢谢。
关于dropwizard - jdbi 返回插入时自动生成的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26133752/
我希望 JDBI 将自动生成的主键(Long 值)转换为另一个类。 我的 DAO: @RegisterMapper(SystemIdMapper.class) public interface Sys
这两个功能是否都经过 sanitizer /安全以防止 SQL 注入(inject)?例如,考虑以下情况: @SqlUpdate("INSERT INTO () VALUES ()") pu
您如何将 dropwizard jdbi 2.78 升级到 jdbi 版本 3,因为我想使用其中包含的连接功能。 最佳答案 项目成员在这里。 我们将在 v3 最终版本之前发布更完整的迁移指南。与此同时
当我尝试执行下面的代码时, 我收到 UnableToCreateStatementException 异常,原因如下: java.sql.SQLException:参数索引超出范围(11 > 参数数量
我正在使用 dropwizard,我想构建一个在实体中具有各种外键关系的 REST 应用程序。 例如,给出以下 3 个表: -- table persons CREATE TABLE PUBLIC.P
我使用 jdbi inTransaction() 函数将 SQL 查询作为事务执行。我想知道内部如何/使用什么类型的锁定机制。另外,事务期间是锁定整个表还是只锁定需要更新的记录? 最佳答案 事务纯粹在
final MyDAO dao = database.onDemand(MyDAO.class); dao 实例可以重用吗?或者我们是否需要在每次使用时实例化它? 从代码来看,它似乎负责维护数据库事务
我在将JDBI仅插入列表中的第一项时遇到问题 data class UserResourceRow( val userId: UserId, val roleId: R
我收到没有可用于 com.google.common.base.Optional 的容器构建器错误。 这是更完整的堆栈跟踪: java.lang.IllegalStateException: No c
我有一个 POJO,其中包含一个内部(非静态)类,因为它共享父级 id public Long getId() { return Parent.this.getId(); } 现在我尝试在 JD
我正在使用 JDBI 通过流迭代结果集。目前,当结果中存在同名列时,mapToMap 会导致问题。我需要的只是没有列名称的值。 有没有办法将结果映射到对象列表/数组?该文档没有这方面的示例。我想要类似
我有以下类(class): public class User { private int id; private String name; private List comm
选择 JPA 和 Spring-Data 的替代方案,我想尝试使用 JDBI 使用 SQLite 实现我的存储库 存储库代码 /** * SQLite implementation of Foo
我想将查询命令放入 sql 文件中,然后使用 createStatement 从文件中读取查询并进行绑定(bind)。 执行 h.createStatement("SOME LONG QUERY AN
我正在尝试使用这样的方法在我的类中创建一个表某物: void createTab() { DBI dbi = new DBI(DBURL, DBUSER, DBPASS); BindExamples
我正在使用 JDBI 将一些数据插入到带有自动递增主键的 mysql 表中。我使用索引来进行插入。代码如下所示: public void insertWorkout(String[] values)
我正在评估 JDBI 作为 Spring JDBC 和 MyBatis 的可能替代品,但遇到了一些问题。我在 Spring Boot 1.2.5 和 Spring 4 中使用 JDBI。 我得到以下堆
我之前曾将 JDBI 用于 Java 持久性方面,但它始终是流畅的 API 而不是对象 API。立即试用对象 API。 我有一个非常简单的 DAO 对象: public interface Perso
1) 是否可以为 Dropwizard 的 JDBI mysql 连接器设置 queryTimout 的 global 值?默认值是多少?我不想在每个 DAO 中都使用@QueryTimeOut。 2
我有一个 Java 应用程序,它使用 JDBI 作为我的数据库代码。我有许多 DAO,它们大致使用以下结构进行查询: return handle.createQuery(sql)
我是一名优秀的程序员,十分优秀!