小编Ekl*_*vya的帖子

如何对多个实体使用单个 JPA 规范类和方法

我正在创建一个 Spring Boot 应用程序,其中包含产品、类别、机械、使用位置等实体。所有这些实体的共同点是它们都有一个名为 name 的 String 属性,并且可以使用 name 从 UI 中过滤。我已经编写了一个使用名称进行过滤的产品规范,并且它正在工作。下面是代码

public final class ProductSpecifications 
{

    public static Specification<Product> whereNameContains(String name)
    {
        Specification<Product> finalSpec = (Root<Product> root, CriteriaQuery<?> query, CriteriaBuilder cb)
            -> cb.like(root.get(Product_.PRODUCT_NAME), "%"+name+"%");
        return finalSpec;
    }

    public static Specification<Product> whereNameEqauls(String name)
    {
        Specification<Product> finalSpec = (Root<Product> root, CriteriaQuery<?> query, CriteriaBuilder cb)
            -> cb.equal(root.get(Product_.PRODUCT_NAME), name);
        return finalSpec;
    }
}

Run Code Online (Sandbox Code Playgroud)

现在的问题是我必须再次编写相同的代码来过滤其他实体,唯一的区别是类名(Product)、字段名称(Product_NAME)和方法的返回类型。我可以创建一个通用类和方法吗?我可以将类名和字段名作为参数传递给它,并返回相应返回类型的规范。

java spring criteria-api spring-data-jpa spring-boot

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

Postgres 返回 []uint8 而不是 []integer

我正在将一个整数数组保存到 PostgreSQL 表中,并且在尝试检索它时,我总是得到 []uint8 而不是 []int。我尝试使用 []integer、[]bigint、[]smallint。没有任何效果。该数组最多表示四项,每一项在 1-100 之间,没有浮点数。

我正在使用 Go,并且我有一个 []int 对象,这是字段:

Quantity []int `json:"quantity" db:"quantity"`
Run Code Online (Sandbox Code Playgroud)

我正在尝试修复它,但找不到让 PostgreSQL 返回 []int 的方法。

所有其他表字段都很好用。该Quantity字段的类型integer[]

这是插入查询:

"INSERT INTO products (product_id, name, manufacturer, image_url, quantity, amount, notes, store_id, store_name, owner_id) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10)", newProduct.UID, newProduct.Name, newProduct.Manufacturer, newProduct.Image, pq.Array(newProduct.Quantity), newProduct.Amount, newProduct.Notes, newProduct.StoreID, newProduct.StoreName, newProduct.OwnerID);
Run Code Online (Sandbox Code Playgroud)

这就是我尝试获取数据的方式。

err := rows.Scan(&temp.ID, &temp.UID, &temp.Name, &temp.Manufacturer,
        &temp.Image, &temp.Amount, &temp.Notes,
        &temp.StoreID, &temp.OwnerID, &temp.StoreName, &temp.Quantity)
Run Code Online (Sandbox Code Playgroud)

问题仅在于数量。如果我更改temp object[]uint8 …

postgresql go pq

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

Java中的字符串'Y'为真,'N'为假

Java中是否有任何库可以将字符串“Y”转换为true或将“N”转换为false?

我做了一个枚举,但我不知道这是否是最好的方法:

public enum BooleanEnum {

    TRUE("Y"), FALSE("F");

    private String booleanValue;

    private BooleanEnum(String booleanValue) {
        this.booleanValue = booleanValue;
    }

    public String getBooleanValue() {
        return booleanValue;
    }

}
Run Code Online (Sandbox Code Playgroud)

并使用:

if (BooleanEnum.TRUE.getBooleanValue().equals(cpoPipelineDTO.getCpoPipelineCategory().getIsDataFlow())) {
Run Code Online (Sandbox Code Playgroud)

java java-8

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

使用枚举字段验证 POJO

我正在处理 POJO 的 spring 和 spring 验证。

在 POJO 内部,我有一些字段,其值将映射到特定ENUM类。

正如下面的代码中提到的,我的 cardType 字段为CardType ENUM.

import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.RequiredArgsConstructor;
import lombok.experimental.SuperBuilder;
import org.hibernate.validator.constraints.Length;

import javax.validation.constraints.Max;

@Data
@SuperBuilder(toBuilder = true)
@RequiredArgsConstructor
@EqualsAndHashCode
class SamplePOJO {

    private String cardType;

    @Length(max = 20)
    private String name;

    @Max(10)
    private int number
}

public enum CardType {
VISA, MASTER;
}
Run Code Online (Sandbox Code Playgroud)

对于姓名和号码我可以做@Max and @Length。我如何对属于提到的cardType应用验证enum。同样在将来,我可能List 还需要检查值。所以如果有人可以指导我。

java validation spring java-8

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

JPA 不为实体生成 ID

我有以下课程

  @Entity
  public class Comment {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "comment_id")
    private Long commentId;

    @Column(name = "creator_id")
    private Long creatorId;

    @Column(name = "text")
    @ApiModelProperty(value = "Text des Kommentar")
    private String text;

    @Column(name = "timestamp")
    @ApiModelProperty(value = "Zeitstempel der letzten Bearbeitung")
    private String timestamp;


    protected Comment() {}
    
    public Comment(CommentDto dto) {
      this();
      updateComment(dto);
    }

    private void updateComment(CommentDto dto) {
      setText(dto.getText());
      setCreatorId(dto.getCreatorId());
      setTimestamp(UtilService.getTimestampString());
    }
Run Code Online (Sandbox Code Playgroud)

我从 HTTP 请求中获得一个 CommentDto,其中包含文本和 CreatorId。

据我了解,commentId 应该通过调用空构造函数来生成。

在我的服务中,我执行以下操作

public void addComment(CommentDto comment) {
  Comment commentEntity = …
Run Code Online (Sandbox Code Playgroud)

java jpa spring-data-jpa

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

使用 Gorm 查询多对多关系

我有一个Movie模型,它在 Gorm 中定义了很多多对多关系。现在我必须创建一个 API 来查询在这些关系中具有 ID 的所有电影。

让我们把它分成小块:

电影型号:

type Movie struct {
    gorm.Model
    TitleID           string     `gorm:"size:50;not null" json:"title_id"`
    OriginalName      string     `gorm:"size:250;not null" json:"original_name"`
    Categories        []Category `gorm:"null;many2many:movie_categories;" json:"categories"`
    Types             []Type     `gorm:"null;many2many:movie_types;" json:"types"`
    Directors         []Cast     `gorm:"null;many2many:movie_directors;" json:"directors"`
    Writers           []Cast     `gorm:"null;many2many:movie_writers;" json:"writers"`
}
Run Code Online (Sandbox Code Playgroud)

我的查询功能:

func (u *Movie) FindMoviesByDirectors(db *gorm.DB, directors string) (*[]Movie, error) {
    var err error
    movies := []Movie{}
    err = db.Set("gorm:auto_preload", true).Where("directors = ?", directors).Find(&movies).Error
    if err != nil {
        return &[]Movie{}, err
    }
    return &movies, err
} …
Run Code Online (Sandbox Code Playgroud)

postgresql go go-gorm

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

Java 8 和 11 之间相同语言环境的不同分组分隔符

我正在根据语言和地区设置区域设置,并希望使用此设置解析 BigDecimal 数字。但我面临的问题是两个 OpenJDK 的分组分隔符不同。

下面是我尝试使用 OpenJDK 8 和 OpenJDK 11 执行的示例代码。

Locale l = new Locale.Builder().setLanguage("de").setRegion("CH").build();
System.out.println("Locale set to " + Locale.getDefault(Locale.Category.FORMAT));
DecimalFormat nf = (DecimalFormat)NumberFormat.getInstance(Locale.getDefault(Locale.Category.FORMAT));
System.out.println("Grouping Separator: " + nf.getDecimalFormatSymbols().getGroupingSeparator());
Run Code Online (Sandbox Code Playgroud)

输出

OpenJDK 8
---------
Locale set to de_CH
Grouping Separator: '


OpenJDK 11
----------
Locale set to de_CH
Grouping Separator: ’
Run Code Online (Sandbox Code Playgroud)

我需要一个通用的解析方法,其中分组分隔符返回相同,以便设计我的单元测试很容易,并且无论是使用 java 8 还是 11 运行它都会通过。请协助。

java locale java-8 java-11 openjdk-11

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

Java ZonedDateTime 不会将 UTC 调整为本地区域

这段代码:

String dateString = "20210811T021500Z";
String dateFormat = "yyyyMMdd'T'HHmmss'Z'";

System.out.println(LocalDateTime.parse(dateString, dateFormat).toString());
System.out.println(LocalDateTime.parse(dateString, dateFormat).atZone(ZoneId.of("Europe/Budapest")).toString());
System.out.println(ZonedDateTime.of(LocalDateTime.parse(dateString, dateFormat), ZoneId.of("Europe/Budapest")).toString());
Run Code Online (Sandbox Code Playgroud)

输出这个:

2021-08-11T02:15
2021-08-11T02:15+02:00[Europe/Budapest]
2021-08-11T02:15+02:00[Europe/Budapest]
Run Code Online (Sandbox Code Playgroud)

如何打印调整后的时间?我希望结果是2021-08-11T04:15.

java java-time zoneddatetime localdatetime

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

如何按对象值将对象数组分组为单独的数组?

例子:

array  = [{name:'Anna'}, {name:'Bob'}, {name:'Joe'}, {name:'Anna'}]
Run Code Online (Sandbox Code Playgroud)

我需要按名称对该数组进行分组以获得单独的数组,例如:

array 1 = [{name:'Anna'}, {name:'Anna'}]
array 2 = [{name:'Joe'}]
array 3 = [{name:'Bob'}]
Run Code Online (Sandbox Code Playgroud)

不知道如何执行此操作。谢谢!

javascript ecmascript-6

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

在 Spring Boot 2.3 中找不到 javax.validation

升级到 Spring Boot 2.3.1 后javax.validation找不到包。

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.3.1.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>
Run Code Online (Sandbox Code Playgroud)

在它工作正常之前。现在imprort javax.validation.Valid;这个导入没有解决。在这里也没有找到他们发布的任何内容

我现在需要从外部添加这个包吗?

spring-boot

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

Java循环垂直

我的代码基本上将数字排列成相反的顺序,例如 415 程序会将它排列成 514 我的代码是正确的,但我有一个问题,输出应该是垂直的。

expected output
5
1
4
Run Code Online (Sandbox Code Playgroud)
import java.util.Scanner;
public class Main{
  public static void main(String args[])
  {
    Scanner in = new Scanner(System.in);
    int num = in.nextInt();
    int rev=0;
    while( num != 0 )
      {
          rev = rev * 10;
          rev = rev + num%10;
          num = num/10;
      }
          System.out.println(rev);
  }
}
Run Code Online (Sandbox Code Playgroud)

java integer loops do-while java.util.scanner

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