小编Cla*_*nei的帖子

列出带有条件的连接表

我有一个 Product 实体,其中包含带有此部分代码的仓库列表:

产品.java

@ManyToMany
@JoinTable(name = "product_has_warehouse", joinColumns = @JoinColumn(name = ID), inverseJoinColumns = @JoinColumn(
        name = "warehouse_id"), foreignKey = @ForeignKey(name = FK + "has_warehouse"),
           inverseForeignKey = @ForeignKey(name = FK + "warehouse"))
private List<Warehouse> warehouses;
Run Code Online (Sandbox Code Playgroud)

所以我需要做一个标准查询来按产品 id 获取仓库列表。

我试过:

    final CriteriaQuery<Warehouse> query = getCriteriaBuilder().createQuery(Warehouse.class);
    final Root<Product> root = query.from(Product.class);
    final Join<Product, Warehouse> warehouseJoin = root.join("warehouses");


    query.where(getCriteriaBuilder().in(warehouseJoin));
    final TypedQuery<Warehouse> typedQuery = getEm().createQuery(query);

    return typedQuery.getResultList();
Run Code Online (Sandbox Code Playgroud)

但我得到:

java.lang.IllegalArgumentException:验证标准时出错,原因如下:java.lang.IllegalStateException:没有显式选择,无法确定隐式选择

java hibernate jpa criteria

5
推荐指数
1
解决办法
4669
查看次数

生产数据库上的飞路 - 迁移校验和不匹配

每次我从DB结构改变一些东西时,我都会创建一个新的迁移文件,使用时间戳按顺序执行,使用干净的数据库,使用迁移命令(使用maven插件或命令行工具),它可以很好地工作,但是在生产数据库中,相同的DB结构但添加了数据我得到了这个错误:

无法执行目标org.flywaydb:flyway-maven-plugin:3.2.1:在项目eee-ejb上迁移(main):org.flywaydb.core.api.FlywayException:验证失败.迁移校验和不匹配迁移1430224929 [错误] - >应用于数据库:-1639634536 [错误] - >本地解决:-1412099238

如何在不断添加数据的生产数据库中使用flyway?

mysql maven flyway

5
推荐指数
2
解决办法
7996
查看次数

Maven发布后如何自动更新application.xml中的版本

application.xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<application xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/application_6.xsd" version="6">
  <description>DESCRIPTION</description>
  <display-name>xxxsystem-ear</display-name>
  <module>
    <ejb>xxxsystem-ejb-3.1.1-SNAPSHOT.jar</ejb>
  </module>
  <module>
    <web>
      <web-uri>xxxsystem-web-3.1.1-SNAPSHOT.war</web-uri>
      <context-root>/xxxsystem</context-root>
    </web>
  </module>
  <library-directory>lib</library-directory>
</application>
Run Code Online (Sandbox Code Playgroud)

我运行后:mvn版本:清洁mvn版本:准备mvn版本:执行

所以我不得不手动将.jar和.war的版本更改为xml文件中的3.1.2。

有一种方法可以告诉Maven为我更改此文件中的版本吗?

我必须对jboss-deployment-structure.xml做同样的事情

<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure>
    <deployment>
        <exclusions>
            <module name="org.apache.log4j" />
        </exclusions>
    </deployment>

    <sub-deployment name="xxx-ejb-3.1.1-SNAPSHOT.jar">
        <exclusions>
            <module name="org.apache.log4j" />
        </exclusions>
    </sub-deployment>

    <sub-deployment name="xxx-web-3.1.1-SNAPSHOT.war">
        <exclusions>
            <module name="org.apache.log4j" />
        </exclusions>
    </sub-deployment>
</jboss-deployment-structure>
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

java xml ear snapshot maven

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

Apache Commons CollectionsUtils.select的Java 8 Lambda替换

我使用Apache Commons lib有以下代码:

public static List<Address> addressesHasType(final List<Address> addresses, final AddressType... types) {
    return (List<Address>) CollectionUtils.select(addresses, new Predicate() {
        @Override
        public boolean evaluate(final Object object) {
            boolean isContains = false;
            for (int i = 0; i < types.length && !isContains; i++) {
                isContains = ((Address) object).getTypes().contains(types[i]);
            }
            return isContains;
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

我试图重构它只使用没有Apache Commons lib的lambda和Java 8,如下所示:

List<Address> addressList = addresses.stream()
    .filter(a -> a.getTypes().contains(types)).collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

但这份名单最终变得空洞.我尝试使用findFirst()但它不返回List而是返回Optional对象.

addressList2 = addresses.stream()
    .filter(a -> a.getTypes().contains(types)).findFirst();
Run Code Online (Sandbox Code Playgroud)

我怎么能这样做?

java lambda apache-commons java-8 java-stream

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

我如何在Java 8 lambda中创建此代码

可以在Lambda中执行此操作:

for (final WarehouseAddress address : warehouse.getAddresses()) {
    if (!Validator.isEmpty(address.getPositions())) {
        final Set<WarehouseAddressPosition> positions = new HashSet<WarehouseAddressPosition>(
                address.getPositions());
        if (address.getPositions().size() > positions.size()) {
            throw new FieldDuplicatedException("position error");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我试过没有成功:

final Set<WarehouseAddressPosition> positions = warehouse.getAddresses().stream().filter(a -> !Validator.isEmpty(a.getPositions())).collect(
            Collectors.toSet());
Run Code Online (Sandbox Code Playgroud)

因为他试图收集一套WarehouseAdress而不是一套WarehouseAdressPosition.

错误:(130,156)java:不兼容类型:推理变量T具有不兼容的边界等式约束:br.com.erp.ejb.entity.sales.WarehouseAddressPosition下限:br.com.erp.ejb.entity.sales.WarehouseAddress

在Warehouse类我有:

private List<WarehouseAddress> addresses;
Run Code Online (Sandbox Code Playgroud)

在WarehouseAddress类中,我有:

private List<WarehouseAddressPosition> positions;
Run Code Online (Sandbox Code Playgroud)

说明:此代码获取位置的原始列表并将其收集在Set中,以创建没有重复值的集合并将大小与原始列表进行比较,以检查它是否重复.由于Set不接受重复值,因此在这种情况下大小将不同.

java lambda java-8

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

标签 统计

java ×4

java-8 ×2

lambda ×2

maven ×2

apache-commons ×1

criteria ×1

ear ×1

flyway ×1

hibernate ×1

java-stream ×1

jpa ×1

mysql ×1

snapshot ×1

xml ×1