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

Hibernate递归与同一实体的多对多关联

另一个Hibernate问题......:P

使用Hibernate的Annotations框架,我有一个User实体.每个人都User可以拥有一群朋友:其他人User的集合.但是,我还没有弄清楚如何在UserUsers 列表组成的类中创建多对多关联(使用用户朋友中间表).

这是User类及其注释:

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

    @Id
    @GeneratedValue
    @Column(name="uid")
    private Integer uid;

    ...

    @ManyToMany(
            cascade={CascadeType.PERSIST, CascadeType.MERGE},
            targetEntity=org.beans.User.class
    )
    @JoinTable(
            name="tbl_friends",
            joinColumns=@JoinColumn(name="personId"),
            inverseJoinColumns=@JoinColumn(name="friendId")
    )
    private List<User> friends;
}
Run Code Online (Sandbox Code Playgroud)

用户朋友的映射表只有两列,这两者都是外键到uid该列tbl_users表.这两列是personId(应该映射到当前用户)和friendId(指定当前用户的朋友的id).

问题是,即使我已经预先填充了朋友表,使得系统中的所有用户都是所有其他用户的朋友,"朋友"字段仍会显示为空.我甚至尝试过切换关系@OneToMany,但它仍然是null(尽管Hibernate调试输出显示了一个SELECT * FROM tbl_friends WHERE personId = ? AND friendId = ?查询,但没有别的).

有关如何填充此列表的任何想法?谢谢!

java entity-relationship hibernate java-ee hibernate-annotations

45
推荐指数
2
解决办法
3万
查看次数

使用Spring Data-JPA更新单向@OneToMany对象列表时的常见行为是什么?

我有一个带有另一个对象列表的对象.它映射如下:

@Entity
@Inheritance(strategy = InheritanceType.JOINED)
@Table(name = "products")
public class Product extends DateAudit {
    private static final long serialVersionUID = 1L;

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

    @NotBlank
    @Size(min = 3, max = 30)
    private String name;

    @NotBlank
    private String shortDescription;

    @NotBlank
    private String description;

    @NotNull
    private Double regularPrice;

    private Double promotionPrice;

    @NotNull
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "category_id", nullable = false)
    private Category category;

    @NotNull
    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "store_id", nullable = false)
    private Store store;

    @Size(max …
Run Code Online (Sandbox Code Playgroud)

java hibernate one-to-many spring-data

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

在Spring Data JPA中命名实体图JOINS结果(需要不同的选项)

我正在使用@NamedEntityGraph注释从数据库加载图表.

@NamedEntityGraph(
    name = "Firma.uredjivanje",
    attributeNodes = {
            @NamedAttributeNode(value="prevodi", subgraph = "prevodi")
    },
    subgraphs = {
            @NamedSubgraph(
                    name = "prevodi",
                    attributeNodes = {
                            @NamedAttributeNode(value = "jezik", subgraph = "jezik")
                    }
            )
    }
)
Run Code Online (Sandbox Code Playgroud)

在Spring Data JPA存储库中,我使用的是注释:

@EntityGraph(value="Firma.uredjivanje", type = EntityGraph.EntityGraphType.LOAD)
List<Firma> getByAktivna(boolean aktivna);
Run Code Online (Sandbox Code Playgroud)

一切都按预期工作,期望所有关系都加入,我得到重复的Firma实体(因为JOIN).我得到{1,1,1,2,2,3}而不是实体ID为{1,2,3}的List.

获取不同实体的最佳方法是什么(如果这不是一个错误的话).

java spring hibernate jpa

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

比Stream.peek()更好的方法

"peek"主要用于调试.如果我想在流的中间调用流上的方法,这会改变流对象的状态,该怎么办?

Stream.of("Karl", "Jill", "Jack").map(Test::new).peek(t->t.setLastName("Doe"));
Run Code Online (Sandbox Code Playgroud)

我可以:

Stream.of("Karl", "Jill", "Jack").map(Test::new).map(t->{t.setLastName("Doe"); return t;});
Run Code Online (Sandbox Code Playgroud)

但这看起来很难看.这是不应该做的事情还是有更好的方法来做到这一点?

编辑:forEach除了它是一个终端操作,然后你不能继续在流上工作.然后我会期望制作一个Collection,do forEach,然后再开始流式传输Collection.

编辑:map(Class::processingMethod)是我现在正在做的,但由于processingMethod简单地返回this,它似乎是对地图的误用.此外,它并不像业务逻辑那样真正地读取.

最终编辑:我接受了@Holger的回答.Stream.peek不能指望处理Stream上的所有元素,因为它不是终端操作.同样的道理map.即使您可能已经使用可以保证它将处理所有操作的内容终止了您的流,但您不应该编写希望每个用户都这样做的代码.因此,要进行处理,您应该使用forEacha Collection,然后Collection如果您愿意再次开始流式处理.

java lambda java-8

6
推荐指数
2
解决办法
761
查看次数

如何使用 Hibernate/JPA 映射 List&lt;String&gt; 而无需额外的连接表?

我问的问题很简单,但似乎不可能找到答案。我正在使用 Spring Data JPA,并且有一个 JDBC/JPA DataSource(这是 PostgreSQL,但这并不重要),它预加载了数据,我只是尝试从中读取数据。

如何构建 POJO 以便拥有List<String>不需要额外连接表的字段?这是我的一个示例实体类:

@Entity
@Table(name = "pojo", schema = "pojoschema")
public class POJO {
  @Id
  @Column(name = "id", columnDefinition = "uuid")
  private String id;

  @Column(name = "a_string", columnDefinition = "text")
  private String aString;

  @Column(name = "strings", columnDefinition = "text[]")
  @ElementCollection
  private List<String> strings;

  // getters/setters
}
Run Code Online (Sandbox Code Playgroud)

这样做我得到一个org.postgresql.util.PSQLException: ERROR: relation "pojo_strings" does not exist.

为什么hibernate认为String我想要的s在另一个表中?我该如何解决这个问题?我只是想通过 JPA 将 PostgreSQLtext[]列映射回List<String>POJO 中的 a 。

java hibernate jpa

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

无法使PrimeFaces RequestContext.getCurrentInstance().openDialog()工作

无法让PrimeFaces RequestContext.getCurrentInstance().openDialog()工作.我将示例代码从primefaces展示中取出,但我从来没有打开过对话框.我在Wildfly 8.2.0.Final上运行PF 5.1.有什么想法吗?

DFView.java

@ManagedBean(name = "dfView")
public class DFView {

    public void chooseCar() {
        RequestContext.getCurrentInstance().openDialog("selectCar");
    }

    public void onCarChosen(SelectEvent event) {
        Car car = (Car) event.getObject();
        FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO, "Car Selected", "Id:" + car.getId());
        FacesContext.getCurrentInstance().addMessage(null, message);
    }
}
Run Code Online (Sandbox Code Playgroud)

和我的dialogplay.xhtml

<!DOCTYPE html>
<ui:composition xmlns="http://www.w3.org/1999/xhtml" template="/WEB-INF/templates/template.xhtml"
  xmlns:ui="http://xmlns.jcp.org/jsf/facelets" xmlns:h="http://xmlns.jcp.org/jsf/html"
  xmlns:p="http://primefaces.org/ui">
  <ui:define name="body">
<h:form>
    <p:growl id="growl" showDetail="true" />

    <p:commandButton value="Select Car" icon="ui-icon-extlink" actionListener="#{dfView.chooseCar}">
        <p:ajax event="dialogReturn" listener="#{dfView.onCarChosen}" update="growl" />
    </p:commandButton>
</h:form>
  </ui:define>
</ui:composition>
Run Code Online (Sandbox Code Playgroud)

jsf primefaces jsf-2

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

如何将 Tomcat 嵌入到 Spring Framework MVC 应用程序中?

我已经创建了所需的配置/控制器类。但我不清楚应该如何编排这些类来运行 tomcat 实例。我知道对于 Spring Boot 来说,这是使用 SpringApplication.run(..) 的问题。但我正在尝试探索 Spring Boot 之前使用的替代方法。我对 Spring 框架有点陌生,所以请原谅我的无知。我也不使用任何 XML 配置,仅使用 Java

public class SpittrWebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer
{

@Override //....
protected String[] getServletMappings(){
    return new String[] { "/" }; 
}

@Override //...
protected Class<?>[] getRootConfigClasses(){
    return new Class<?>[] { RootConfig.class };
}

@Override //.....
protected Class<?>[] getServletConfigClasses(){
    return new Class<?>[] { WebConfig.class };
}
}
Run Code Online (Sandbox Code Playgroud)

我创建了一个控制器

@Controller
@RequestMapping("/")
public class HomeController {

    @RequestMapping(method = RequestMethod.GET)
    public String home(){
        return "home";
    }
Run Code Online (Sandbox Code Playgroud)

POM 文件:

    <dependencies>
    <dependency>
        <groupId>org.springframework</groupId> …
Run Code Online (Sandbox Code Playgroud)

java spring tomcat spring-mvc spring-boot

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

Jacoco - “缺课”是什么意思?

我没有为 MISSEDCOUNT 找到足够的信息

<rules>
  <rule implementation="org.jacoco.maven.RuleConfiguration">
    <element>BUNDLE</element>
    <limits>
      <limit implementation="org.jacoco.report.check.Limit">
        <counter>INSTRUCTION</counter>
        <value>COVEREDRATIO</value>
        <minimum>0.80</minimum>
      </limit>
      <limit implementation="org.jacoco.report.check.Limit">
        <counter>CLASS</counter>
        <value>MISSEDCOUNT</value>
        <maximum>0</maximum>
      </limit>
    </limits>
  </rule>
</rules>
Run Code Online (Sandbox Code Playgroud)

我也遇到了一个错误:

Rule violated for bundle xxxx: classes missed count is 1, but expected maximum is 0)

你能给我一个简单的例子,什么时候可以抛出它以及我应该在我的java项目中使用这个检查(MISSEDCOUNT)吗?

java maven jacoco

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

等待 ParallelFlux 完成

我创建了一个ParallelFlux然后使用了.sequential(),期望在那时我可以计算或“减少”并行计算的结果。问题似乎是并行线程被触发,没有什么在等待它们。

我已经使用 a 完成了一些工作,CountDownLatch但我认为我不应该这样做。

TL; DR - 我无法打印出此代码的结果:

    Flux.range(0, 1000000)
    .parallel()
    .runOn(Schedulers.elastic())
    .sequential()
    .count()
    .subscribe(System.out::println);
Run Code Online (Sandbox Code Playgroud)

java reactor reactive-programming project-reactor spring-webflux

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

内联列表中具有属性的SimpleXML单深度元素

我想解析以下XML

<entry key="9" type="9">
  <value>
    <amount stake="10">50000000</amount>
    <amount stake="1">5000000</amount>
    <winner>0.0</winner>
    <description>9 Correct Numbers</description>
  </value>
</entry>
Run Code Online (Sandbox Code Playgroud)

我尝试通过以下课程实现这一目标:

@Root(name="entry")
public class OddsEntryXMLObject {

    @Attribute(name="key")
    private String iKey;

    @Attribute(name="jackpot", required=false)
    private String iJackpot;

    @Attribute(name="type", required=false)
    private String iType;

    @Element(name="value")
    private OddsValueXMLObject iOddsValueXMLObject;
}

public class OddsAmountXMLObject {

    @Element(name="amount")
    private String iAmount;

    @Attribute(name="stake", required=false)
    private String iStake;
}
Run Code Online (Sandbox Code Playgroud)

但是我得到以下异常:

java.lang.RuntimeException: org.simpleframework.xml.core.ValueRequiredException: Unable to satisfy @org.simpleframework.xml.Element(data=false, name=amount, required=true, type=void) on field 'iAmount' private java.lang.String OddsAmountXMLObject.iAmount for class OddsAmountXMLObject at line 1
Run Code Online (Sandbox Code Playgroud)

有人知道如何解析吗?

java xml simple-framework

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