小编Xtr*_*mer的帖子

POJO的"部分"排序列表

我有List以下类的对象:

public class Foo {
    private Date date;
    private String name;
    private Long number;
}
Run Code Online (Sandbox Code Playgroud)

此列表是从数据库中获取的order by date asc, number desc,但是需要始终保留的部分是排序依据date asc.

结果示例(Dateformat = MM/dd/yyyy):

01/01/2016  Name1   928562
01/01/2016  Name2   910785
01/01/2016  Name3   811290
01/01/2016  Name4   811289
01/01/2016  Name5   5000000
02/01/2016  Name3   877702
02/01/2016  Name1   852960
02/01/2016  Name2   749640
02/01/2016  Name4   749500
02/01/2016  Name5   5000000
Run Code Online (Sandbox Code Playgroud)

现在我想订购该列表,以便它导致:

01/01/2016  Name2   910785
01/01/2016  Name1   928562
01/01/2016  Name3   811290
01/01/2016  Name4   811289
01/01/2016  Name5   5000000
02/01/2016  Name2 …
Run Code Online (Sandbox Code Playgroud)

java sorting nested-loops java-8

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

如何连接两个IntStream?

我想List<String>用72-129和132-200的数值创建一个.我想过使用一个IntStream并将值映射到字符串并收集到列表中.我用过这段代码:

List<String> strings72to200 = Stream
        .concat(Stream.of(IntStream.range(72, 129)), Stream.of(IntStream.range(132, 200)))
        .map(e -> String.valueOf(e)).collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

但是,如果我调试实际值strings72to200,我得到这个:

[java.util.stream.IntPipeline$Head@56d13c31, java.util.stream.IntPipeline$Head@5f9127c5]
Run Code Online (Sandbox Code Playgroud)

我相信这个Stream.concat()以及.map()导致这个问题,因为我有一个像这样的工作代码:

List<String> strings50to59 = IntStream.range(50, 60).mapToObj(e -> String.valueOf(e))
        .collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

请注意,这件作品使用的是.mapToObj()代替.map().

所以问题是,如何通过流创建一个包含这些值的列表(注意初始拆分)(因为这看起来比循环更平滑)?我应该创建完整列表并在之后删除不需要的项目(在更大的间隙上不可行)吗?

java java-stream

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

无法解析对 bean“jpaSharedEM_entityManagerFactory”的引用

我想将一个项目从 spring boot 2.2.7 迁移到 spring boot 3.0.0。为此,我使用 spring starter 生成了一个新项目,除了生成的项目之外,我还添加了一些依赖项:

  • 龙目岛
  • 映射结构
  • 发送网格
  • 阿帕奇 POI
  • 云数
  • hibernate-jpamodelgen

完整的pom:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.0.0</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.app</groupId>
    <artifactId>chronos</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>chronos</name>
    <description>Chronos booking system</description>
    <properties>
        <java.version>17</java.version>
        <org.mapstruct.version>1.5.3.Final</org.mapstruct.version>
        <lombok.version>1.18.24</lombok.version>
        <version.hibernate-jpamodelgen>6.1.5.Final</version.hibernate-jpamodelgen>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-validation</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>io.micrometer</groupId>
            <artifactId>micrometer-tracing-bridge-brave</artifactId>
        </dependency>
        <dependency>
            <groupId>org.liquibase</groupId> …
Run Code Online (Sandbox Code Playgroud)

java spring jpa entitymanager

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

正则表达式从捕获组/解决方法中删除字符

假设我有一个像下面这样的字符串

@ABCD|NN12CT55|GFR

现在我想匹配

@ABCD|N

并将其替换为

@ABCD N

用于匹配的正则表达式 @ABCD\|[^G]

有没有办法删除 | 来自捕获组?

regex

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

Java 9-在运行时动态添加jar

我有一个类加载器问题与Java 9。

这段代码可用于以前的Java版本:

 private static void addNewURL(URL u) throws IOException {
    final Class[] newParameters = new Class[]{URL.class};
    URLClassLoader urlClassLoader = (URLClassLoader) ClassLoader.getSystemClassLoader();
    Class newClass = URLClassLoader.class;
    try {
      Method method = newClass.getDeclaredMethod("addNewURL", newParameters );
      method.setAccessible(true);
      method.invoke(urlClassLoader, new Object[]{u});
    } catch (Throwable t) {
      throw new IOException("Error, could not add URL to system classloader");
    }
  }
Run Code Online (Sandbox Code Playgroud)

这个线程中,我了解到必须将其替换为以下内容:

Class.forName(classpath, true, loader);

loader = URLClassLoader.newInstance(
            new URL[]{u},
            MyClass.class.getClassLoader()
Run Code Online (Sandbox Code Playgroud)

MyClass是我要在其中实现该Class.forName()方法的类。

u = file:/C:/Users/SomeUser/Projects/MyTool/plugins/myNodes/myOwn-nodes-1.6.jar

String classpath = URLClassLoader.getSystemResource("plugins/myNodes/myOwn-nodes-1.6.jar").toString();
Run Code Online (Sandbox Code Playgroud)

由于某些原因-我真的不知道为什么-在运行时我收到ClassNotFoundException Class.forName(classpath, …

java jar classloader urlclassloader java-9

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

如何在连接列中指定外键?

我的代码如下。我正在使用带有jpa和postgresql数据库的spring boot,我需要用户友好的名称作为外键。

    @实体
    @Table(name =“ course_table”)
    公共课程课程扩展了BaseAuditingEntity {

    @ManyToMany(级联= CascadeType.REMOVE,提取= FetchType.EAGER)
    @JoinTable(name =“ course_program_table”,joinColumns = @JoinColumn(name =“ course_id”,referencedColumnName =“ course_id”,foreignKey = @ForeignKey(name =“ fk_program_id”)),inverseJoinColumns = @JoinColumn(name =“ program_id”, referencedColumnName =“ program_id”,foreignKey = @ForeignKey(name =“ fk_course_id”)))
    私人名单计划;
    }

我已经使用@ForeignKey批注指定了外键的名称,但是当我看到db时,它显示了随机创建的外键名称。

创建表course_program_table
(
    course_id整数NOT NULL,
    program_id整数NOT NULL,
    约束fk_28c95hl4nqclyvyxuduei5nbf外键(program_id)
        参考public.program_table(program_id)匹配简单
        无需更新时
        删除任何操作后,
    约束fk_5sainywquv8yyu24pjk3jptn7外键(course_id)
        参考public.course_table(course_id)匹配简单
        无需更新时
        不删除任何动作
)

我需要注释中提到的外键,例如fk_program_id和fk_course_id。

提前致谢。

java spring hibernate jpa spring-boot

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

org.hibernate.criterion.CriteriaQuery 的使用示例

我需要重构以下代码以便在 hibernate 5 中使用。这包括删除每个已弃用的调用。

public List<T> findByExample(T example, String... excludeProperty) {   
    Criteria crit = session.createCriteria(T.class);
    Example ex = Example.create(example);
    for (String exclude : excludeProperty) {
        ex.excludeProperty(exclude);
    }
    crit.add(ex);
    return crit.list();
}
Run Code Online (Sandbox Code Playgroud)

由于createCriteria已弃用,我打算将其替换为getSession().getCriteriaBuilder().createQuery(Foo.class);. 从理论上讲,这是正确的方法,但现在我不知道如何进行Example以及如何在代码中使用它。

谁能帮我使用Examplehibernate 5 吗?

java hibernate jpa-2.0 hibernate-5.x

5
推荐指数
0
解决办法
611
查看次数

Java相等日期不相等

我刚刚遇到了一个非常奇怪的行为。我想比较2个使用完全相同的日期d1.equals(d2);,但结果是错误的。

调试时,我发现两个日期的“快速时间”为1531951200000。之后,我将检查更改为d1.getTime() == d2.getTime()并得到了相等的结果。

我还检查equals()的方法,java.util.Date这确实几乎完全一样

public boolean equals(Object obj) {
    return obj instanceof Date && getTime() == ((Date) obj).getTime();
}
Run Code Online (Sandbox Code Playgroud)

请注意,这两个对象都是类型java.util.Date这就排除了,有可能是一个区别,即java.util.DateVS java.sql.Date。还要注意,其中一个值是从数据库中读取的,而另一个是从文件中读取的。这两个值都设置为带有java.util.Date字段的同一类的不同实例。

有人对此有解释吗?还是我只是想念一些东西?

java date equals

5
推荐指数
0
解决办法
163
查看次数

Java 8 Stream List <Foo>使用条件groupingBy映射<Date,Map <String,Long >>

下课:

public class Foo {
    private Date date;
    private String name;
    private Long number;
}
Run Code Online (Sandbox Code Playgroud)

我现在有一个List<Foo>我要转换的Map<Date, Map<String,Long>>(Long应该是一个总和numbers).让这很难的是我在内部地图中只需要26个条目,其中第26个被称为"其他",它总结了数量低于其他数字的所有数据.

我想出了以下代码:

data.stream().collect(Collectors.groupingBy(e -> e.getDate(), Collectors.groupingBy(e -> {
    if (/*get current size of inner map*/>= 25) {
        return e.getName();
    } else {
        return "Other";
    }

}, Collectors.summingLong(e -> e.getNumber()))));
Run Code Online (Sandbox Code Playgroud)

如您所见,我不知道如何检查内部地图中已有的元素数量.我如何获得内部地图的当前大小,还是有另一种方法来实现我想要的?

我的Java 7代码:

Map<Date, Map<String, Long>> result = new LinkedHashMap<Date, Map<String, Long>>();
for (Foo fr : data) {
    if (result.get(fr.getDate()) == null) {
        result.put(fr.getDate(), new LinkedHashMap<String, Long>()); …
Run Code Online (Sandbox Code Playgroud)

java java-8 java-stream

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

如何正确映射休眠中的枚举集合?

我有一个引用枚举类型列表的实体。该列表存储在数据库中,如下所示:

userName    role
-----------------------
user0001    role1
user0001    role2
user0001    role3
user0002    role1
Run Code Online (Sandbox Code Playgroud)

对应的java类大致是这样的:

@Entity
@Table(name = "UserTable")
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "userId")
    private Integer id;
    @Column(name = "user_name")
    private String userName;

    @ElementCollection(targetClass = Role.class)
    @CollectionTable(name = "User_Roles")
    @Column(name = "role")
    @Enumerated(EnumType.STRING)
    private List<Role> roles;

}
Run Code Online (Sandbox Code Playgroud)

我检查了这个这个问题的映射。然而我有两个问题。第一个问题是这userName不是我的 PK,UserTable据我所知,hibernate 确实加入了 PK。

第二个问题是当前设置的错误:

org.hibernate.LazyInitializationException:无法延迟初始化角色集合:com.project.Common.User.roles,无法初始化代理 - 没有会话

此错误应通过EAGER加载来修复,但是当我尝试该错误时,在启动时出现以下错误:

java.lang.IllegalStateException:尝试针对查询空间 uid [<gen:1>] 注册多个 SQL 表别名 [roles1_、roles2_ 等]

我需要更改什么才能使此映射正常工作?


请注意,如果可能的话,我不想执行任何数据库更改。 …

java mapping enums hibernate jpa

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