我有个小问题。假设我有这个实体:
import lombok.Data;
import javax.persistence.*;
import java.util.Set;
@Data
@Entity
public class Person {
enum SEX {F, M}
@Id
@GeneratedValue
private Long id;
@OrderBy
@Enumerated(EnumType.STRING)
@ElementCollection(fetch = FetchType.EAGER)
private Set<SEX> sexes;
private String firstName;
private String lastName;
}
因为在某些时候我不想加载名字和姓氏,所以我使用了投影(https://docs.spring.io/spring-data/jpa/docs/1.10.2.release/reference/html/#Projections):我定义了这个接口:
import java.util.Set;
public interface PersonSlim {
String getId();
Set<Person.SEX> getSexes();
}
现在来看看这个存储库:
import org.springframework.data.repository.CrudRepository;
import java.util.List;
public interface PersonRepo extends CrudRepository<Person, Long> {
List<PersonSlim> getAllBy();
}
2018-12-14 16:36:36.808 DEBUG 14227 --- [ main] org.hibernate.SQL : select person0_.id as id1_0_, person0_.first_name as first_na2_0_, person0_.last_name as last_nam3_0_ from person person0_
所以基本上Spring加载所有字段。如果在PersonSlim接口中排除getSexes()
方法,Spring将只加载ID:
2018-12-14 16:38:03.977 DEBUG 14382 --- [ main] org.hibernate.SQL : select person0_.id as col_0_0_ from person person0_
Spring加载所有字段,如果我的投影包含ElementCollection。
为什么这是一个问题?
我使用带有几何字段的PostGIS-DB并且几何可以非常大。所以,如果我加载很多实体,它会变得很慢。在某些情况下,我不想加载此字段。
看起来,当投影包含非基元类型时,所有列都将包含在查询中。
这里已经存在一个问题https://jira.spring.io/browse/datajpa-1218,从这个问题听起来,这个问题现在还不能用投影来解决。
这对您可能很有用https://github.com/blazebit/blaze-persistence,这里记录了实体视图
我已经为此挣扎了好几天了。我们刚刚开始与mongoDB合作,因此我对它的了解非常有限。 总之,我想做的是:我们有一个叫做Loan的课程,就像这样: 由于查询此集合时必须执行各种操作,因此我们在LoanRepository中创建了一个聚合(该聚合适用于我们在Mongo Compass中创建的,然后将其导出到我们的代码中): 这个想法是,在所有上述操作之后,我们只需要从整个Loans表中返回一些字段(
问题内容: 我想知道在应用程序启动之前加载初始数据库数据的最佳方法是什么?我正在寻找的东西将用数据填充我的H2数据库。 例如,我有一个域模型“ User”,我可以通过转到/ users来访问用户,但是最初数据库中没有任何用户,所以我必须创建它们。无论如何,是否有自动用数据填充数据库的信息? 目前,我有一个由容器实例化并为我创建用户的Bean。 例: 但是我非常怀疑这是最好的方法。还是? 问题答案:
问题内容: 是否可以使用Custom Spring PropertyPlaceholderConfigurer从数据库加载属性?提供给自定义PropertyPlaceholderConfigurer的数据源是否有可能在类路径中使用特定的属性文件? 我无法通过以下链接找到满意的答案? http://www.mkyong.com/spring/spring-propertyplaceholdercon
我想知道在应用程序启动之前加载初始数据库数据的最佳方法是什么?我正在寻找的是一些东西,将填补我的H2数据库与数据。 例如,我有一个域模型“user”我可以通过转到/users来访问用户,但最初数据库中没有任何用户,所以我必须创建它们。是否存在自动填充数据库的数据? 但我很怀疑这是最好的方法。还是真的?
主要内容:语法,实例假设这样一种情况,当在同一时间有多个数据库可用,您想使用其中的任何一个。SQLite 的 ATTACH DATABASE 语句是用来选择一个特定的数据库,使用该命令后,所有的 SQLite 语句将在附加的数据库下执行。 语法 SQLite 的 ATTACH DATABASE 语句的基本语法如下: 如果数据库尚未被创建,上面的命令将创建一个数据库,如果数据库已存在,则把数据库文件名称与逻辑数据库 '
假设我有那些DTO: 在我的存储库中,我使用这些DTO作为投影进行查询: 我可以使用这个repo很好地访问ForumDTO中的id、name,但对于lasthread,它只返回null。我试过作为最后一个线程。Id、lastThread\u Id、lastThreadId均无效。