小编bps*_*ngh的帖子

使用 JPA Criteria API 生成正确和/或条件

我正在尝试在“或”和“和”条件中生成带有多个括号的查询,但没有生成内部括号。外部谓词的括号正确生成,但不是内部谓词的括号。代码:

    CriteriaBuilder criteriaBuilder = this.getEntityManager().getCriteriaBuilder();
    CriteriaQuery<ConfigurationKey> query = criteriaBuilder.createQuery(ConfigurationKey.class);
    Root<ConfigurationKey> configurationKeyRoot = query.from(ConfigurationKey.class);
    Join<ConfigurationKey, Customer> configurationKeyCustomerJoin = configurationKeyRoot.join(ConfigurationKey_.customer);

    final List<Predicate> predicates = new ArrayList<>();
    predicates.add(criteriaBuilder.equal(configurationKeyCustomerJoin.get(Customer_.externalId), customerId));
    predicates.add(criteriaBuilder.equal(configurationKeyRoot.get(ConfigurationKey_.configType), configType));

    final List<Predicate> orPredicates = new ArrayList<>();
    keys.forEach((x, y) -> {
                orPredicates.add(
                        criteriaBuilder.and(
                                criteriaBuilder.equal(configurationKeyRoot.get(ConfigurationKey_.keyType), x),
                                criteriaBuilder.equal(configurationKeyRoot.get(ConfigurationKey_.keyValue), y)
                        )
                );
            }

    );

    predicates.add(criteriaBuilder.or(orPredicates.toArray(new Predicate[orPredicates.size()])));
    query.where(criteriaBuilder.and(predicates.toArray(new Predicate[predicates.size()])));
    query.select(configurationKeyRoot);
    TypedQuery<ConfigurationKey> typedQuery = this.getEntityManager().createQuery(query);
Run Code Online (Sandbox Code Playgroud)

生成的查询:

select
    configurat0_.id as id1_1_,
    configurat0_.createdAt as createdA2_1_,
    configurat0_.updatedAt as updatedA3_1_,
    configurat0_.configType as configTy4_1_,
    configurat0_.customerId as customer7_1_,
    configurat0_.keyType as keyType5_1_,
    configurat0_.keyValue as keyValue6_1_ …
Run Code Online (Sandbox Code Playgroud)

java sql jpa criteria-api jpa-2.0

4
推荐指数
1
解决办法
4791
查看次数

检查重复列表Java 8

给定n个列表,我想知道是否有任何两个列表具有完全相同的元素.下面是Java 7中的代码.

public static <T> boolean hasduplicateList(List<List<T>> lists) {
    for (List<T> outerList : lists) {
        int count = 0;
        Set<T> outerSet = new HashSet<>(outerList);
        for (List<T> innerList : lists) {
            Set<T> innerSet = new HashSet<>(innerList);
            if (outerSet.equals(innerSet)) {
                count++;
            }
            if (count == 2) {
                return true;
            }
        }
    }
    return false;
}
Run Code Online (Sandbox Code Playgroud)

是否有更好的方法来实现特别使用Java8?

java list arraylist duplicates java-8

3
推荐指数
1
解决办法
2954
查看次数

Android NDK:无法使用sqlite3_open打开数据库文件

我需要在Android中使用ndk从C++层执行数据库操作.

但是在使用sqlite3_open打开数据库时,我收到"无法打开数据库文件"错误.

我正在使用Java获取数据库路径:

String sqliteDir = getApplicationContext().getDatabasePath("MyDb").getPath();
Run Code Online (Sandbox Code Playgroud)

C++代码:

int rc = sqlite3_open(dbPath, _db);
if(rc != SQLITE3_OK) LOGD("Can't open database: %s with path %s\n", KSqlite3::sqlite3_errmsg(_db), dbPath);
else LOGD(" Opened database successfully %s \n", sqlite3_errmsg(_db));
Run Code Online (Sandbox Code Playgroud)

Android.mk

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE    := myMod
LOCAL_SRC_FILES := myMod.cpp sqlite3.c
LOCAL_LDLIBS := -llog 
#Includes various C++ libraries
include $(BUILD_SHARED_LIBRARY)
Run Code Online (Sandbox Code Playgroud)

错误消息: 无法打开数据库:无法使用路径/data/data/com.packageName/databases/MyDb打开数据库文件

c++ sqlite android-ndk

2
推荐指数
1
解决办法
1626
查看次数

RxAndroid - BehaviorSubject 未在 onNext 上发射

我正在尝试使用 MVVM 模式学习 RXJava。

这是我试图实现的场景:

在某些搜索事件中,我正在调用 SearchViewModel.handleSearchTopic() ,它正在发出列表,但不知何故它没有被观察者的 onNext 事件捕获。订阅也成功进行。我想我犯了一些简单的错误,请指出。另外,有没有更好的方法来实现这个用例?

搜索视图模型.java

private final BehaviorSubject<List<Topic>> topicList = BehaviorSubject.create();

public void handleSearchTopic() {
    List<Topic> list = //getsomehow;
    topicList.onNext(list);
}

public Observable<List<Topic>> getTopicListObservable() {
    return topicList.asObservable();
}
Run Code Online (Sandbox Code Playgroud)

片段.java

@NonNull
private CompositeSubscription subscription;

@NonNull
private SearchViewModel searchViewModel;

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    searchViewModel = new SearchViewModel();
    bind();
}

@Override
public void onDestroy() {
    unBind();
    super.onDestroy();
}

private void bind() {
    subscription = new CompositeSubscription();

    subscription.add(searchViewModel.getTopicListObservable()
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(new Observer<List<Topic>>() {
                @Override
                public void …
Run Code Online (Sandbox Code Playgroud)

java android mvvm rx-java

0
推荐指数
1
解决办法
1552
查看次数

标签 统计

java ×3

android ×1

android-ndk ×1

arraylist ×1

c++ ×1

criteria-api ×1

duplicates ×1

java-8 ×1

jpa ×1

jpa-2.0 ×1

list ×1

mvvm ×1

rx-java ×1

sql ×1

sqlite ×1