小编Nei*_*ton的帖子

Spring JPA Query用于获取表中的最新记录

我是Spring JPA的新手.我有一个名为Product的模型.我正在尝试编写一个api终点来获取products表的最近记录.

public static interface Repository extends PagingAndSortingRepository<Product, Long>
   {
      List findTop2ByOrderByIdDesc();
   }
Run Code Online (Sandbox Code Playgroud)

当我运行我的应用程序HAL浏览器 http:// localhost:8080/api/v1/products/search/findTop2ByOrderByIdDesc

我收到的错误是

{
  "timestamp": 1440573947629,
  "status": 500,
  "error": "Internal Server Error",
  "exception": "org.springframework.dao.IncorrectResultSizeDataAccessException",
  "message": "result returns more than one elements; nested exception is javax.persistence.NonUniqueResultException: result returns more than one elements",
  "path": "/api/v1/products/search/findTop2ByOrderByIdDesc"
}
Run Code Online (Sandbox Code Playgroud)

如何解决这个问题.好心提醒

spring hal spring-data spring-data-jpa

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

Spring TransactionRequiredException异常

这是我的存储库配置:

@Configuration
public class RepositoryConfing {
    @Bean
    public LocalContainerEntityManagerFactoryBean entityManagerFactoryBean(DataSource dataSource, JpaVendorAdapter jpaVendorAdapter){
        LocalContainerEntityManagerFactoryBean entityManagerFactoryBean = new LocalContainerEntityManagerFactoryBean();
        entityManagerFactoryBean.setDataSource(dataSource);
        entityManagerFactoryBean.setJpaVendorAdapter(jpaVendorAdapter);
        entityManagerFactoryBean.setPackagesToScan("com.imdb.model");
        return entityManagerFactoryBean;
    }

    @Bean
    public BasicDataSource dataSource(){
        BasicDataSource ds = new BasicDataSource();
        ds.setDriverClassName("org.postgresql.Driver");
        ds.setUrl("jdbc:postgresql://localhost:5432/imdb");
        ds.setUsername("***");
        ds.setPassword("***");
        ds.setInitialSize(5);
        return ds;
    }

    @Bean
    public JpaVendorAdapter jpaVendorAdapter(){
        HibernateJpaVendorAdapter adapter = new HibernateJpaVendorAdapter();
        adapter.setDatabase(Database.POSTGRESQL);
        adapter.setShowSql(true);
        adapter.setGenerateDdl(false);
        adapter.setDatabasePlatform("org.hibernate.dialect.PostgreSQLDialect");
        return adapter;
    }
}
Run Code Online (Sandbox Code Playgroud)

当我调用merge方法时,我得到一个例外:javax.persistence.TransactionRequiredException: No EntityManager with actual transaction available for current thread - cannot reliably process 'merge' call

可能是我RepositoryConfig缺少一些额外的配置? …

java spring transactions exception spring-data-jpa

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

状态字段路径无法解析为集合类型

在我的实体模型中,我有一个 ManyToMany RelationUserUserGroup User 是一个公共@Entity类,而是UserGroup一个 Java enum

映射看起来像这样:

@ElementCollection(targetClass = my.package.UserRight.class, fetch = FetchType.EAGER)
@Enumerated(EnumType.STRING)    
@CollectionTable(name = "MD_USER_RIGHTS", joinColumns = @JoinColumn(name = "REF_USER_ID"))
@Column(name = "USER_GROUP")
@Getter @Setter private Set<UserRight> userGroups;
Run Code Online (Sandbox Code Playgroud)

除非我尝试访问通过 JPQL 设置的用户组,否则一切正常。我不想将来自用户实体的所有信息暴露给下一层,所以我编写了一个简单的 JPQL 查询来从我的用户实体创建一些 DTO:

简化:

public List<UserDTO> findAllActive() {
    Query q = em.createQuery("SELECT NEW my.package.UserDTO(m.name, m.id, m.userGroups) 
                              FROM User m ");
    return q.getResultList();
}
Run Code Online (Sandbox Code Playgroud)

这会导致以下错误:

Exception [EclipseLink-0] (Eclipse Persistence Services - 2.6.0.v20150309-bf26070): org.eclipse.persistence.exceptions.JPQLException
Exception Description: Problem compiling [SELECT NEW …
Run Code Online (Sandbox Code Playgroud)

jpa eclipselink jpql

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

引起:com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:表'test.hibernate_sequence'不存在

我正在OneToOne研究Hibernate的映射示例并面临以下错误:我不确定这里出了什么问题.请指导.

Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'test.hibernate_sequence' doesn't exist
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:422)
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:407)
    at com.mysql.jdbc.Util.getInstance(Util.java:382)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1052)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3603)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3535)
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1989)
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2150)
    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2626)
    at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2119)
    at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:2281)
    at org.hibernate.id.enhanced.TableStructure.executeQuery(TableStructure.java:224)
    at org.hibernate.id.enhanced.TableStructure.access$300(TableStructure.java:46)
    at org.hibernate.id.enhanced.TableStructure$1$1.execute(TableStructure.java:139)
    at org.hibernate.id.enhanced.TableStructure$1$1.execute(TableStructure.java:126)
    at org.hibernate.jdbc.WorkExecutor.executeReturningWork(WorkExecutor.java:55)
    at org.hibernate.jdbc.AbstractReturningWork.accept(AbstractReturningWork.java:34)
    at org.hibernate.resource.transaction.backend.jdbc.internal.JdbcIsolationDelegate.delegateWork(JdbcIsolationDelegate.java:56)
    ... 13 more
Run Code Online (Sandbox Code Playgroud)

Vehicle.java

@Entity
@Table(name="VEHICLE")
public class Vehicle {
    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    @Column(name="VEHICLE_ID")
    private Integer vehicleId;

    @Column(name="VEHICLE_NAME")
    private String vehicleName;
    // setter and getters
} …
Run Code Online (Sandbox Code Playgroud)

java mysql hibernate

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

Ebean 只选择特定的列

我有一个带有字段 id 、 name 、 price 等的类产品,...

我只想从表中获取名称..

我目前正在使用此查询

 String sql =   "select name from product where price = 100";
 SqlQuery sqlQuery = Ebean.createSqlQuery(sql);
  List<SqlRow> list = sqlQuery.findList();
Run Code Online (Sandbox Code Playgroud)

使用 List 查找但仅获取名称的警报方式是什么

List<product> list = product.find.where("price = 100").select("name").findList();
Run Code Online (Sandbox Code Playgroud)

我认为以下查询效率不高,因为它获取所有数据并返回我们对其进行过滤的情况

  List<String> list = new ArrayList<String>();

    for(product p: product.find.select("name").findList())
     {
        list.add(p.name);
    }


return list;
Run Code Online (Sandbox Code Playgroud)

playframework ebean

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

Spring CrudRepository在自定义查询方法定义上抛出AbstractMethodError

我正在尝试在扩展CrudRepository接口的接口中创建自定义查询.不幸的是,每次我收到java.lang.AbstractMethodError时出于某种原因.请参阅下面的完整堆栈跟踪.
据我所知,问题是Spring框架应该"神奇地"为我的方法声明创建一个实现,但由于某种原因它没有成功.


存储库界面:

public interface PresentationRepository extends CrudRepository<Presentation, Integer> {
    Iterable<Presentation> findAll(Sort sort);
    Page<Presentation> findAll(Pageable pageable);

    List<Presentation> findByTitle(String title); // the problematic line
}
Run Code Online (Sandbox Code Playgroud)

演示实体课程:

@Entity
@Table(name = "presentation")
public class Presentation {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "presentation_id")
    Integer id;
    String title;
    String logo;
    @Column(name = "length")
    Integer interval;
    @Column(name = "pages")
    Integer pageCount;
    Date created;
    Date modified;
    Date approved;
    Date published;
    Date deleted;
    @ManyToMany(fetch = FetchType.EAGER)
    @JoinTable(
            name = "presentation_filters",
            joinColumns = @JoinColumn(name = "presentation_id"),
            inverseJoinColumns = …
Run Code Online (Sandbox Code Playgroud)

java spring spring-mvc spring-data spring-data-jpa

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

如何在Spring Boot JPA中将实体名称作为变量提供给查询

@Query("select c from :entity c )

BaseEntity findOne( @Param("value") String entity );
Run Code Online (Sandbox Code Playgroud)

这给出了一个错误说:

由以下原因引起:org.hibernate.hql.internal.ast.QuerySyntaxException:意外令牌::靠近第1行,第15列[从:entity c中选择c],位于org.hibernate.hql.internal.ast.QuerySyntaxException.convert(QuerySyntaxException。 java:91)〜[hibernate-core-4.3.11.Final.jar:4.3.11.Final]

hibernate spring-data-jpa spring-boot

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

如何从Spring启动应用程序启动服务器模式下的HSQLDB

我有一个Spring引导应用程序,运行jpa数据和hsqldb 2.3.3(在Centos 7中),应用程序运行正常,但我想使用HSQLDB数据库管理器来检查数据状态,但它失败了:

application.properties:

spring.datasource.url=jdbc:hsqldb:mem:testdb
spring.datasource.username=sa
spring.datasource.password=

spring.jpa.database-platform=org.hibernate.dialect.HSQLDialect
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=create
Run Code Online (Sandbox Code Playgroud)

启动HSQLDB的命令:

java -cp /home/mycentos/.m2/repository/org/hsqldb/hsqldb/2.3.3/hsqldb-2.3.3.jar org.hsqldb.util.DatabaseManagerSwing
Run Code Online (Sandbox Code Playgroud)

如果我尝试使用HSQLDB服务器模式登录,则会弹出Connection refused错误

jdbc:hsqldb:hsql://localhost/testdb
Run Code Online (Sandbox Code Playgroud)

如果我尝试登录内存中的数据库,我可以登录但不会显示表和数据

jdbc:hsqldb:hsql:testdb
Run Code Online (Sandbox Code Playgroud)

题:

  1. 如何使其工作?
  2. 我是否必须从tomcat部署文件夹中引用hsqldb.jar,因为这是应用程序使用的那个?
  3. 从Spring应用程序在服务器模式或内存模式下配置hsqldb的任何配置差异?
  4. 任何方法都可以使内存模式在这种情况下工作(通过db创建Spring引导检查数据)?

spring jdbc hsqldb

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

线程“main”org.hibernate.MappingException 中的异常:未知实体:com.myApp.data.entities.User

我已经解决了这里发布的大多数类似问题,发现那里的解决方案是使用 javax.persistence.Entity 导入而不是 org.hibernate.annotations.Entity。

我使用了正确的导入,但仍然得到 org.hibernate.MappingException

我正在使用 mysql-connector-java 版本 6.0.5 和 hibernate-core 版本 5.2.6.Final 和 hibernate-annotations 版本 3.5.6-Final

Exception in thread "main" org.hibernate.MappingException: Unknown entity: com.myApp.data.entities.User
    at org.hibernate.metamodel.internal.MetamodelImpl.entityPersister(MetamodelImpl.java:620)
    at org.hibernate.internal.SessionImpl.getEntityPersister(SessionImpl.java:1627)
    at org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:104)
    at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:192)
    at org.hibernate.event.internal.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:38)
    at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:177)
    at org.hibernate.event.internal.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:32)
    at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:73)
    at org.hibernate.internal.SessionImpl.fireSave(SessionImpl.java:682)
    at org.hibernate.internal.SessionImpl.save(SessionImpl.java:674)
    at org.hibernate.internal.SessionImpl.save(SessionImpl.java:669)
    at com.myApp.data.Application.main(Application.java:26)
Run Code Online (Sandbox Code Playgroud)

pom.xml 如下:

<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.myApp</groupId>
  <artifactId>hibernate-course</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <name>hibernate-course</name>
  <dependencies>
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-core</artifactId>
        <version>5.2.6.Final</version>
    </dependency>
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-annotations</artifactId>
        <version>3.5.6-Final</version>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>1.7.22</version>
    </dependency>
    <dependency>
        <groupId>mysql</groupId> …
Run Code Online (Sandbox Code Playgroud)

java hibernate mysql-connector

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

使用Spring调用数据库函数

我需要通过 SQL 查询数据库的函数,就像这样简单

@Query("SELECT random()")

如何实现域/存储库服务方法来执行此操作?

java spring spring-data spring-data-jpa spring-boot

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