小编K.N*_*las的帖子

Spring Data 和 JPA 中的递归关系?

我的Comment实体是自加入的,有一个subComment集合。

@Entity
public class Comment {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private String id;

@OneToMany(mappedBy = "parentComment", cascade = CascadeType.ALL)
private Set<Comment> subComments = new HashSet<>();

@ManyToOne
@JoinColumn(referencedColumnName = "id")
private Comment parentComment;
Run Code Online (Sandbox Code Playgroud)

在我的addComment方法中

public ResponseEntity<Comment> addComment(Comment comment) {
    Comment currComment = commentRepository.save(comment);
    if (currComment.getParentId() != null) {
        Comment parent = commentRepository.findById(currComment.getParentId()).orElse(null);
        if (parent != null) {
            parent.addSubComment(currComment);
            currComment.setParentId(parent.getId());
            currComment.setParentComment(parent);
            commentRepository.save(parent);
        }
    }
    Comment responseComment = commentRepository.save(currComment);
    return ResponseEntity.ok(responseComment);
}
Run Code Online (Sandbox Code Playgroud)

当我尝试建立反向关系(拥有方)时, comment.setParentComment(parent);导致错误

comment.setParentComment(parent); 导致错误: …

java spring hibernate h2

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

Jpa 几个@ManyToOne 与级联

我有三个实体,Session、Order 和 User(我的在线电影票项目的一部分)。在我的域模型中,Order 保留了 User 和 Session 的 fk。正如你在我的代码中看到的:


@Table(name="Orders")
@Entity

public class Order {
    @ManyToOne
    @JoinColumn(nullable = false)
    private User user;

    @ManyToOne
    private Session session;
    ...
}



@Entity 
@Table(name="Session")

public class Session {
    @OneToMany(fetch=FetchType.LAZY,
               cascade = CascadeType.ALL,
               mappedBy = "session")
    private List<Order> orders = new ArrayList<Order>();
    ...
}



@Table(name="User")
@Entity

public class User {
    @OneToMany(cascade = {  CascadeType.PERSIST,
                            CascadeType.MERGE,
                            CascadeType.REMOVE },
               mappedBy = "user")
    private @Getter Set<Order> orders = new HashSet<>();
    ...
}
Run Code Online (Sandbox Code Playgroud)

我的问题是,我可以CascadeType.ALL在 Session 和 User …

java spring hibernate jpa cascade

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

Spring Data JPA通过查询从实体获取投影

在我的应用程序中,我有一个英雄实体。我还希望能够返回每个英雄ID和名称的列表。我得到它与此工作:

@Repository
public interface HeroEntityRepository extends JpaRepository<HeroEntity, Long> {
@Query("select s.id, s.name from HEROES s")
List<Object> getIdAndName();
}

// in controller:
@GetMapping
public List<Object> getHeroNames() {
    return heroEntityRepository.getIdAndName();
}
Run Code Online (Sandbox Code Playgroud)

我在另一篇文章中尝试了用接口替换Object的建议,但是随后我收到了一个空值列表([{{name“:null,” id“:null},{” name“:null,” id“ :null},//等)。自定义界面:

public interface HeroNameAndId {

    Long getId();
    String getName();
}
Run Code Online (Sandbox Code Playgroud)

当创建仅具有ID和名称值的Entity时,我收到了“ ConverterNotFoundException”。我不确定正确的方法是。我有它与对象一起工作,但这似乎不是很干净。

我的HeroEntity:

@Getter
@Builder
@Entity(name = "HEROES")
@AllArgsConstructor
public class HeroEntity extends HasId<Long> {

    private String name;
    private String shortName;
    private String attributeId;

    @ElementCollection private List<String> translations;

    @OneToOne(cascade = CascadeType.ALL) private HeroIconEntity icon;

    private String role; …
Run Code Online (Sandbox Code Playgroud)

java spring jpql spring-data-jpa

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

Spring-Data-Jpa:带有子查询的 INNER JOIN


我有以下问题。我想在我的 Spring Boot 项目中执行这个查询。我尝试使用 JPA 存储库界面中的查询注释来做到这一点。但是它在内部联接中说“意外的选择”。当我直接在 mySQL 数据库上执行此查询时,它将起作用。

有没有人对这种情况有解决方案?

这是我的查询:

SELECT t1.*
FROM az_manager t1
INNER JOIN
(
    SELECT maID, MAX(datum) AS max_date
    FROM az_manager
    WHERE maID IN (7243, 1)
    GROUP BY maID
) t2
   ON t1.maID = t2.maID AND t1.datum = t2.max_date
WHERE
    t1.maID IN (7243, 1);
Run Code Online (Sandbox Code Playgroud)

这是我的课:

@Entity
@Table(name = "az_manager")
@IdClass(TnsWorkingHoursManagerId.class)
@Getter
@Setter
public class TnsWorkingHoursManager extends TnsObject{

    @Id
    @Column(name = "datum")
    private long date;

    @Id
    @Column(name = "maid")
    private int employeeId;

    @Column(name = "typid")
    private int …
Run Code Online (Sandbox Code Playgroud)

java mysql hibernate jpa spring-data-jpa

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

反应式编程:Spring WebFlux:如何构建微服务调用链?

Spring Boot应用:

a@RestController接收以下有效负载:

{
  "cartoon": "The Little Mermaid",
  "characterNames": ["Ariel", "Prince Eric", "Sebastian", "Flounder"]
}
Run Code Online (Sandbox Code Playgroud)

我需要按以下方式处理它:

  1. 获取每个角色名称的唯一 ID:对“卡通人物”微服务进行 HTTP 调用,该服务按名称返回 id
  2. 转换控制器接收到的数据:将角色名称替换为上一步从“卡通人物”微服务接收到的适当 ID。 { "cartoon": "The Little Mermaid", "characterIds": [1, 2, 3, 4] }

  3. 使用转换后的数据向“cartoon-db”微服务发送 HTTP POST 请求。

  4. 将“cartoon-db”的响应映射到作为控制器返回值的内部表示。

我遇到的问题:

Reactive Programming我需要使用(非阻塞\异步处理)和Spring WebFluxMono| Flux)的范例来实现所有这些步骤Spring Reactive WebClient- 但我对该堆栈的经验为零,试图尽可能多地阅读它,再加上谷歌搜索很多但是仍然有很多未解答的问题,例如:

Q1 . 我已经配置了响应式 webClient,向“卡通人物”微服务发送请求:

      public Mono<Integer> getCartoonCharacterIdbyName(String characterName) {
    return WebClient.builder().baseUrl("http://cartoon-characters").build()
        .get()
        .uri("/character/{characterName}", characterName)
        .retrieve()
        .bodyToMono(Integer.class);
  }
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,我有一个卡通人物名称列表,对于每个角色我需要调用getCartoonCharacterIdbyName(String name)方法,我不确定串联调用它的正确选项,相信正确的选项:并行执行。

写了如下方法: …

reactive-programming spring-boot reactive spring-webflux spring-webclient

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

无法通过简单的示例让 JAXB 处理接口

我正在尝试非官方 JAXB 指南 - 映射接口 \xe2\x80\x94 Project Kenai,第 3.2.1 节中显示的 JAXB 接口的简单示例,它对我不起作用。我使用的是最新的 JDK 1.8_70 并且没有使用任何特殊的库。为了完整起见,代码:

\n\n
@XmlRootElement\nclass Zoo {\n  @XmlAnyElement\n  public List<Animal> animals;\n}\n\ninterface Animal {\n  void sleep();\n  void eat();\n  ...\n}\n\n@XmlRootElement\nclass Dog implements Animal { ... }\n\n@XmlRootElement\nclass Lion implements Animal { ... }\n
Run Code Online (Sandbox Code Playgroud)\n\n

对此有什么帮助吗?我收到的错误是:

\n\n
[com.sun.istack.internal.SAXException2: class testjaxb.Cat nor any of its super class is known to this context.\njavax.xml.bind.JAXBException: class testjaxb.Cat nor any of its super class is known to this context.]\n
Run Code Online (Sandbox Code Playgroud)\n\n

编辑:发布 JAXBContext.newInstance 代码:

\n\n
Zoo …
Run Code Online (Sandbox Code Playgroud)

java xml jaxb2

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

Spring Data JPA 和 Projection 为 TupleConverter 获取 ConverterNotFoundException

有没有办法TupleConverter在 Spring Data 中编写和注册转换器?当我在 Repository 接口中有一个 @Query 注释并要求投影时,我收到了这个异常。

界面:

public interface ProjectRepository extends JpaRepository<Project, Integer> {
    @Query("select p.projectId, p.projectName, p.techstack from Project p")
    public List<ProjectItem> findAllForTest();
}
Run Code Online (Sandbox Code Playgroud)

DTO:

public class ProjectItem {
    private final Integer projectId;
    private final String projectName;
    private final String techstack;
    @JsonCreator
    public ProjectItem(
        @JsonProperty("projectId") Integer projectId, 
        @JsonProperty("projectName") String projectName, 
        @JsonProperty("techstack") String techstack
    ) {
        this.projectId = projectId;
        this.projectName = projectName;
        this.techstack = techstack;
    }
    public Integer getProjectId() {
        return projectId;
    }
    public String getProjectName() …
Run Code Online (Sandbox Code Playgroud)

java spring spring-data spring-data-jpa

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

更新 JPA 或 Hibernate 中的多对多关系

我有两个Entity像下面...

@Entity
@Table(name = "USER")
public class User {
    @Id
    private Long id;

    private String name;

    @ManyToMany(fetch = FetchType.LAZY, mappedBy = "groupMemberList")
    @Fetch(FetchMode.SELECT)
    private List<Group> groupList = new ArrayList<>();

    // Getters - Setters
}


@Entity
@Table(name = "GROUP")
public class Group {
    @Id
    private Long id;

    private String name;

    @ManyToMany(fetch = FetchType.LAZY/*, mappedBy = "groupList"*/)
    @Fetch(FetchMode.SELECT)
    @JoinTable(name = "SEC_GROUP_VS_MEMBER", joinColumns = @JoinColumn(name = "GROUP_ID"),
            inverseJoinColumns = @JoinColumn(name = "MEMBER_ID"))
    private List<User> groupMemberList;

    // Getters - Setters
}
Run Code Online (Sandbox Code Playgroud)

我想 …

java hibernate jpa

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

Java lambda toMap 的 Map&lt;String, Boolean&gt;

我不明白为什么会失败;

Map<String, Boolean> iMap = Arrays.asList("1","2","3","4","5").stream()
  .collect(Collectors.toMap(k->k, Boolean.TRUE));
Run Code Online (Sandbox Code Playgroud)

错误消息:

Multiple markers at this line
    - Type mismatch: cannot convert from T to K
    - The method toMap(Function<? super T,? extends K>, Function<? super T,? extends U>) 
      in the type Collectors is not applicable for the arguments ((<no type> k) -> {}, Boolean)
Run Code Online (Sandbox Code Playgroud)

任何帮助表示赞赏。

java collections lambda

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

Spring-Data-JPA ManyToMany 关系与额外列

我一直在努力与链接表中的附加列建立多对多关系。

这些是我的实体:

    @JsonIgnoreProperties({ "hibernateLazyInitializer", "handler" })
    public class Post {

    @Id
    @GeneratedValue
    private Long id;

    private String name; 

    @OneToMany(mappedBy = "post", cascade = CascadeType.ALL, orphanRemoval = true)
    @JsonIgnore
    private List<PostTag> tags = new ArrayList<>();

    //getters and setters

    public void addTag(Tag tag){
        PostTag postTag = new PostTag(this, tag);
        tags.add(postTag);
        tag.getPosts().add(postTag);
    }

    public void removeTag(Tag tag) {
        for (Iterator<PostTag> iterator = tags.iterator(); 
             iterator.hasNext(); ) {
            PostTag postTag = iterator.next();

            if (postTag.getPost().equals(this) &&
                    postTag.getTag().equals(tag)) {
                iterator.remove();
                postTag.getTag().getPosts().remove(postTag);
                postTag.setPost(null);
                postTag.setTag(null);
            }
        }
    }

    @Override …
Run Code Online (Sandbox Code Playgroud)

java spring hibernate jpa spring-data-jpa

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

Spring Data JPA - 为三个表创建 @Composite 键

我从这里扩展我的问题:使用 JPA/Hibernate 使用三个表定义 CompositeKey?。在此示例中,我希望创建复合键来创建 PRODUCT_ID、CATEGORY_ID、STOCK_ID 的唯一组合。

我开发了下面的代码,但不确定如何将记录保存到数据库中。

Stock.java

@Entity
public class Stock implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = IDENTITY)
    @Column(name = "STOCK_ID", unique = true, nullable = false)
    private Integer stockId;

    @Column(name = "STOCK_CODE", unique = true, nullable = false, length = 10)
    private String stockCode;

    @Column(name = "STOCK_NAME", unique = true, nullable = false, length = 20)
    private String stockName;

    // Owner of the relationship
    @OneToMany(fetch = FetchType.LAZY, …
Run Code Online (Sandbox Code Playgroud)

java jpa composite-primary-key spring-data-jpa jpa-2.2

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