首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JOOQ + JPA实体

JOOQ + JPA实体
EN

Stack Overflow用户
提问于 2020-09-03 03:23:33
回答 1查看 563关注 0票数 2

我是JOOQ库的新手,有一件事让我很感兴趣。我首先在JOOQ上实现了CRUD服务,之后我试图避免一些重复的代码。为了达到这个目标,我添加了JPA仓库,并在我的由JOOQ生成的类中添加了@Entity注解。现在,我仍然希望在某些情况下使用JOOQ (使用筛选、排序和分页来查询列表)。但是出现了一些错误,现在在JOOQ发出select请求之后,我可以在我的类的属性中看到空值。

我通过筛选器获得了正确的实体计数,但映射后类的属性为空。在这种情况下,是映射错误还是我不能同时使用JOOQ和JPA?

我的所有实体的抽象类(正如我所说的,为了避免重复代码,我重构了一些代码,现在使用泛型):

代码语言:javascript
复制
@MappedSuperclass
public abstract class AbstractServiceEntity {

private Integer id;

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
public Integer getId() {
    return id;
}

public void setId(Integer id) {
    this.id = id;
}
}

我的JPA类(由JOOQ生成):

代码语言:javascript
复制
/**
* This class is generated by jOOQ.
*/
@SuppressWarnings({ "all", "unchecked", "rawtypes" })
@Entity
@Table(schema = "ref", name = "account")
public class Account extends AbstractServiceEntity implements Serializable {

   private static final long serialVersionUID = -162537472;

private Integer       id;
private Integer       transitId;
private Integer       partnerId;
private String        currencyCode;
private String        descr;
private Long          inCredit;
private Long          balanceLimit;
private Long          outCredit;
private LocalDateTime createdAt;
private LocalDateTime updatedAt;
private Integer       transitPartnerId;

public Account() {}

public Account(Account value) {
    this.id = value.id;
    this.transitId = value.transitId;
    this.partnerId = value.partnerId;
    this.currencyCode = value.currencyCode;
    this.descr = value.descr;
    this.inCredit = value.inCredit;
    this.balanceLimit = value.balanceLimit;
    this.outCredit = value.outCredit;
    this.createdAt = value.createdAt;
    this.updatedAt = value.updatedAt;
    this.transitPartnerId = value.transitPartnerId;
}

public Account(
    Integer       id,
    Integer       transitId,
    Integer       partnerId,
    String        currencyCode,
    String        descr,
    Long          inCredit,
    Long          balanceLimit,
    Long          outCredit,
    LocalDateTime createdAt,
    LocalDateTime updatedAt,
    Integer       transitPartnerId
) {
    this.id = id;
    this.transitId = transitId;
    this.partnerId = partnerId;
    this.currencyCode = currencyCode;
    this.descr = descr;
    this.inCredit = inCredit;
    this.balanceLimit = balanceLimit;
    this.outCredit = outCredit;
    this.createdAt = createdAt;
    this.updatedAt = updatedAt;
    this.transitPartnerId = transitPartnerId;
}

我的方法是从DB中提取实体:

代码语言:javascript
复制
@Repository
@RequiredArgsConstructor
public class JooqAccountRepository {

private final DSLContext jooq;

public List<Account> findAll(Condition filterCondition, SortField[] sortFields, Integer partnerId, Integer limit, Integer offset) {
    return jooq.selectFrom(ACCOUNT)
            .where(ACCOUNT.PARTNER_ID.equal(partnerId))
            .and(filterCondition)
            .orderBy(sortFields)
            .limit(limit)
            .offset(offset)
            .fetchInto(Account.class);
}

public Integer findAccountsCount(Integer partnerId) {
    return jooq.selectCount().from(ACCOUNT)
            .where(ACCOUNT.PARTNER_ID.equal(partnerId))
            .fetchOne(0, Integer.class);
}

}

EN

回答 1

Stack Overflow用户

发布于 2020-09-03 17:27:51

作为我搜索的结果-我在Account类中犯了一个注释错误。如果你想同时使用这些框架,你应该在实体属性上使用@Column,或者以不同的方式设置你的jooq的codegen插件) This resource was usefull for me

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63712315

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档