标签: javax.persistence

javax.persistence.Id和org.springframework.data.annotation.Id有什么区别?

我很想之间是否存在的差异javax.persistence.Idorg.springframework.data.annotation.Id.

  1. 如果Spring创建该注释仅用于支持JPA注释,那么为什么呢?
  2. 是否org.springframework.data.annotation.Id有另一个[附加]目的是什么?

java spring-data javax.persistence

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

重新保存修改后的对象时,JPA 合并()无法按预期工作

这是我为实体设置的:

@Entity
@Getter
@Setter
@Table(name = "movies", schema = "public")
public class Movie {
    @Id
    @Column(name = "id")
    private UUID movieId;

    @OneToMany(mappedBy = "actor", fetch = FetchType.EAGER, cascade = CascadeType.ALL)
    private Set<Actors> actors = new HashSet<>();

    //Getters and setters
    }
}
Run Code Online (Sandbox Code Playgroud)
@Entity
@Getter
@Setter
@Table(name = "actors_movies", schema = "public")
public class ActorMovie {
    @EmbeddedId
    private ActorId id;

    @ManyToOne(fetch = FetchType.LAZY)
    @MapsId("movieId")
    @JoinColumn(name = "id_movie_movie")
    private Movie movie;

    //Getters and setters below
}
Run Code Online (Sandbox Code Playgroud)

entityManager.merge()当我Actor向电影列表添加新内容时,我能够成功调用。以下成功保留了表格。

Movie movie = …
Run Code Online (Sandbox Code Playgroud)

java persistence jpa javax.persistence

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

为什么我的转换列被 JpaAttributeTypeInspection 标记为错误消息“'基本'属性类型不应该是地图”?

我试图通过 JPA 和 Spring 将一些 JSON 作为字符串存储在列中,并且正在关注baeldung 教程。我的代码是这样的:

    @Column
    @Convert(converter = MyEntityExtentionConverter.class)
    private Map<String, Object> myEntityExtention;
Run Code Online (Sandbox Code Playgroud)

MyEntityExtentionConverter是一种javax.persistence.AttributeConverter<Map<String, Object>, String>使用 Jackson 来回转换字符串的实现ObjectMapper

根据提到的教程,这应该是它,但是现在我收到一个错误

“基本”属性类型不应是地图

理论上我可以通过添加@SuppressWarnings("JpaAttributeTypeInspection")注释来禁用它,但这感觉就像忽略而不是解决错误。我在这里做错了什么?

json hibernate jpa intellij-idea javax.persistence

10
推荐指数
3
解决办法
3179
查看次数

何时使用@Embedded和@Embeddable?

在Java中可以将类注释为@Embeddable或将属性设置为@Embedded.示例代码:

@Embeddable
class A{
...
}

class B{
...
}

@Entity
class Foo {
    A a;
    @Embedded B b;
}
Run Code Online (Sandbox Code Playgroud)

什么时候喜欢@Embedded@Embeddable

java jpa javax.persistence

7
推荐指数
2
解决办法
6169
查看次数

尝试使用 Spring / JPA / Hikari 在我的代码中查找数据库连接泄漏

我遇到了一个 Spring Web 应用程序的问题,该应用程序在从我的连接池中获取连接时会定期遇到错误。最终在日志中我看到如下条目:

  • 引起:javax.persistence.PersistenceException:org.hibernate.exception.JDBCConnectionException:无法获取JDBC连接
  • 引起:java.sql.SQLTransientConnectionException:HikariPool-1 - 连接不可用,请求在 30000 毫秒后超时。

一旦达到这一点,我发现的唯一恢复方法是重新启动 Tomcat。

我认为最可能的解释是我在某处有一些代码没有正确清理它的连接 - 将它返回给 Hikari,让某些东西打开所以 Spring 无法清理它,等等。

为了排除故障,我已将我的 hikari 配置 leakDetectionThreshold 设置为 5000 毫秒并启用日志记录。在那之后,我看到像这样的日志条目

2018-04-24 19:53:56 WARN  ProxyLeakTask:87 - Connection leak detection 
triggered for org.postgresql.jdbc.PgConnection@664ec666, stack trace 
follows
java.lang.Exception: Apparent connection leak detected
    at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122)
    at org.hibernate.internal.NonContextualJdbcConnectionAccess.obtainConnection(NonContextualJdbcConnectionAccess.java:35)
    at org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl.acquireConnectionIfNeeded(LogicalConnectionManagedImpl.java:99)
    at org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl.getPhysicalConnection(LogicalConnectionManagedImpl.java:129)
    at org.hibernate.engine.jdbc.internal.StatementPreparerImpl.connection(StatementPreparerImpl.java:47)
    at org.hibernate.engine.jdbc.internal.StatementPreparerImpl$5.doPrepare(StatementPreparerImpl.java:146)
    at org.hibernate.engine.jdbc.internal.StatementPreparerImpl$StatementPreparationTemplate.prepareStatement(StatementPreparerImpl.java:172)
    at org.hibernate.engine.jdbc.internal.StatementPreparerImpl.prepareQueryStatement(StatementPreparerImpl.java:148)
    at org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1940)
    at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1909)
    at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1887)
    at org.hibernate.loader.Loader.doQuery(Loader.java:932)
    at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:349)
    at org.hibernate.loader.Loader.doList(Loader.java:2615)
    at org.hibernate.loader.Loader.doList(Loader.java:2598)
    at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2430)
    at org.hibernate.loader.Loader.list(Loader.java:2425)
    at org.hibernate.loader.custom.CustomLoader.list(CustomLoader.java:335) …
Run Code Online (Sandbox Code Playgroud)

java spring hibernate hikaricp javax.persistence

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

CriteriaQuery 月份和年份过滤器

我正在尝试在包含一列日期 (Oracle 11G) 的模型中进行条件查询 (JPA/Hibernate)。例如,我有

  1. 2009 年 1 月 13 日
  2. 2009 年 1 月 15 日
  3. 09 年 3 月 16 日

我的功能是这样的:

public MyEntity getEntitiesFromCertainFilters(int a, int b, java.util.date c)
{
    CriteriaBuilder builder = entityManager.getCriteriaBuilder();
    CriteriaQuery< MyEntity > query = builder.createQuery(MyEntity.class);
    Root< MyEntity > root = query.from(MyEntity.class);

    query.select(root).where (
        builder.equal ( root.get ( "id" ).get ( "codEstablec" ) , establecimiento),
        builder.equal ( root.get ( "id" ).get ( "correlGrupo" ) , correlGrupo),
        //HERE I NEED TO ADD FILTER BY …
Run Code Online (Sandbox Code Playgroud)

java oracle spring hibernate javax.persistence

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

如何使用复杂类型的javax.persistence.criteria.Predicate?

我有一个覆盖方法"toPredicate"的方法:

@Override
public Predicate toPredicate(Root<Person> root, CriteriaQuery<?> cq, CriteriaBuilder cb) {
    List<Predicate> predicates = new ArrayList<>();
Run Code Online (Sandbox Code Playgroud)

我必须构建谓词.简单类型很容易,例如:

@Entity
@Table
public class Person {

    @Column
    private String name;

    @Column
    private String surname;

}
Run Code Online (Sandbox Code Playgroud)

通过这个简单的课程,我可以做到:

@Override
public Predicate toPredicate(Root<Person> root, CriteriaQuery<?> cq, CriteriaBuilder cb) {
    List<Predicate> predicates = new ArrayList<>();

    if (StringUtils.isNotBlank(surname)) {
        predicates.add(cb.equal(root.get("surname"), surname));
    }

    if (StringUtils.isNotBlank(name)) {
        predicates.add(cb.equal(root.get("name"), name));
    }
Run Code Online (Sandbox Code Playgroud)

但是如果属性是复杂类型,我如何找到复杂类型中包含的简单属性?

这是一种潜在的情况:

@Entity
@Table
public class Person {

    @Column
    private String name;

    @Column
    private String surname;

    @OneToMany(fetch = FetchType.LAZY, cascade …
Run Code Online (Sandbox Code Playgroud)

java spring-data spring-data-jpa spring-data-rest javax.persistence

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

Spring Boot - javax Import语句无法正常工作

我刚开始工作的春天开机,和我目前正在跟踪这个教程有一些小的修改,命名和使用自己的版本Eclipse,它有这个发生器内置的.

当我到达第一段代码时,我尝试只复制import语句开头,

import com.fasterxml.jackson.annotation.JsonIgnore;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import java.util.HashSet;
import java.util.Set;
Run Code Online (Sandbox Code Playgroud)

这让javax导入出现以下错误:

The import javax.persistence.[insert name here] cannot be resolved
Run Code Online (Sandbox Code Playgroud)

当我找到javax.persistence包时,我发现,确实,他们自己的服务提供的入门代码不包含列出的包.我很困惑,想知道我是否在最初的步骤中做错了什么.有人有主意吗?

编辑1:提供的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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>com.Me</groupId>
<artifactId>petstore</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>

<name>petstore</name>
<description>Petstore Project</description>

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.3.5.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <java.version>1.8</java.version>
</properties>

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope> …
Run Code Online (Sandbox Code Playgroud)

java eclipse spring spring-mvc javax.persistence

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

在spring + hibernate中保存creationTimestamp和updatedTime

我需要使用 createdDate 和 updatedDate 更新 postgres DB 我尝试使用方法 1,但它插入了空值。当我阅读时,似乎@prepersist 注释不适用于会话。

所以我决定使用方法 2 :Hibernate @CreationTimeStamp Annotation,我添加了 hibernate-annotations maven 依赖项,但是 @CreationTimeStamp 没有解析并给出编译错误。

有人可以建议我如何解决问题吗?

方法 1 使用 @Entity 和 @Table 注释的实体类

      public class Status{
      @Id
    @Column(name = "run_id")
    private int run_id; 

    @Column(name = "status")
    private String status; 

    @Temporal(TemporalType.TIMESTAMP)
    @Column(name = "created_date" , updatable=false)
    private Date created;

    @Temporal(TemporalType.TIMESTAMP)
    @Column(name = "updated_date" ,  insertable=false)
    private Date updated;

    @PrePersist
    protected void onCreate() {
        created = new Date();
    }


    @PreUpdate
    protected void onUpdate() {
        updated = new …
Run Code Online (Sandbox Code Playgroud)

spring hibernate javax.persistence

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