预先加载是一种在同一请求中加载某个类的对象和多个命名关联的方法。
如何在 Quarkus 应用程序中急切地初始化 CDI bean
有quarkus 1.2.1 + jakarta cdi 2.0.2的项目。 我添加了 SQS 消息的侦听器。 问题是所有的bean都是默认延迟创建的,这显然不适合...
我制作了一个带有自定义属性 gpp_per_sqm 的资产模型,计算并汇总所有资产单位的每平方米 gpp。其他情况下不需要受保护的 $appends。我添加它是为了尝试...
在包含查询的数组上使用条件时,我面临 n+1 问题。 以下是下表: 雷姆斯 |编号| |姓名| 1 AAA 2 BB rem_相关性 |编号| |rem_id| |姓名| |已删除| |
带有二级缓存的 Hibernate 6.2+ 会忽略急切加载
我有一个使用 hibernate 6.2.13.Final 和 jcache/ehcache 进行二级缓存的项目: org.hibernate.orm 休眠核心 我有一个使用 hibernate 6.2.13.Final 和 jcache/ehcache 进行二级缓存的项目: <dependency> <groupId>org.hibernate.orm</groupId> <artifactId>hibernate-core</artifactId> <version>6.2.13.Final</version> </dependency> <dependency> <groupId>org.hibernate.orm</groupId> <artifactId>hibernate-envers</artifactId> <version>6.2.13.Final</version> </dependency> <!-- API for 2nd Level Cache --> <dependency> <groupId>org.hibernate.orm</groupId> <artifactId>hibernate-jcache</artifactId> <version>6.2.13.Final</version> </dependency> <!-- Implementation for 2nd Level Cache --> <dependency> <groupId>org.ehcache</groupId> <artifactId>ehcache</artifactId> <classifier>jakarta</classifier> <version>3.10.8</version> </dependency> 我有带有 @ManyToOne(fetch = FetchType.EAGER) 和缓存的实体。我知道预加载是一种反模式,但软件很复杂,目前无法更改。 @Entity @Cacheable @Audited @Cache(usage = CacheConcurrencyStrategy.READ_WRITE) public class FooType { @Id @GeneratedValue(generator = "system-uuid") @GenericGenerator(name = "system-uuid", strategy = "uuid2") @Size(max = 36) @Column(length = 36) @UserInterface(showInForm = false, showInList = false) @Comment("Primary key") private String id; @Version @NotNull @UserInterface(showInForm = false, showInList = false) @Comment("Version column for optimistic locking") private int version; public String getId() { return id; } public void setId(String id) { this.id = id; } public int getVersion() { return version; } public void setVersion(int version) { this.version = version; } } @Entity @Cacheable @Audited @Cache(usage = CacheConcurrencyStrategy.READ_WRITE) public class Foo { @Id @GeneratedValue(generator = "system-uuid") @GenericGenerator(name = "system-uuid", strategy = "uuid2") @Size(max = 36) @Column(length = 36) @UserInterface(showInForm = false, showInList = false) @Comment("Primary key") private String id; @Version @NotNull @UserInterface(showInForm = false, showInList = false) @Comment("Version column for optimistic locking") private int version; @ManyToOne(fetch = FetchType.EAGER) private FooType; public String getId() { return id; } public void setId(String id) { this.id = id; } public int getVersion() { return version; } public void setVersion(int version) { this.version = version; } public FooType getFooType() { return fooType; } public void setFooType(FooType fooType) { this.fooType = fooType; } } 当我查询条目时,一切都很好。 entityManager.find(Foo.class, id); 但是,当我查询多个条目时,FooType在Foo的结果中延迟加载,并且是一个休眠代理对象。 final TypedQuery<Foo> fooQuery = entityManager.createQuery("FROM Foo f", Foo.class); final List<Foo> fooList = fooQuery.getResultList(); Hibernate 6.2 并禁用二级缓存 当我停用二级缓存时,结果会按预期急切加载。 <property name="hibernate.cache.use_second_level_cache" value="false" /> Hibernate 6.1 并启用二级缓存 当我将 Hibernate 版本更改为 6.1.7.Final 并启用二级缓存时,结果按预期急切加载。 休眠 6.4.0.CR1 与 6.2 相同的问题 我不确定这是一个错误还是缓存的预期变化?但是,我在 hibernate 6.2 迁移指南中没有找到任何有关此内容的信息。我该如何处理这个问题,我需要在启用二级缓存的情况下急切加载结果。 我在Hibernate论坛得到了答案: 仅仅因为您看到为关联设置了代理对象并不意味着它是延迟加载的。有时 Hibernate ORM 出于其他原因需要使用代理,但会确保对象作为加载操作的一部分进行初始化。 Hibernate 论坛中的Thread,其中包含 Jackson 的提示。
我想优化我的应用程序。多个模型中有很多相似的关系,但我找不到减少查询量的方法。 例子: 类用户扩展模型{ $with = ['我...
我创建了 RoleEnum 并将其投射到用户模型中。被转换为 RoleEnum 的 role_id 也与角色模型有关系。 我创建了 RoleEnum 并将其投射到用户模型中。被转换为 RoleEnum 的 role_id 也与角色模型有关系。 <?php namespace App\Enums; enum RoleEnum:int { case SYSTEM_ADMINISTRATOR = 1; case ADMINISTRATOR = 2; case SAMPLE_ROLE_ONE = 3; case SAMPLE_ROLE_TWO = 4; case SAMPLE_ROLE_THREE = 5; case SAMPLE_ROLE_FOUR = 6; } 用户模型 protected $casts = [ 'email_verified_at' => 'datetime', 'password' => 'hashed', 'role_id' => RoleEnum::class, ]; public function role(): BelongsTo { return $this->belongsTo(Role::class); } 在我的控制器索引中 $users = User::with('role') ->paginate() ->withQueryString(); 我收到此错误,它指向 paginate()。它必须使用类而不是值。 Object of class App\Enums\RoleEnum could not be converted to string 编辑:经过进一步测试,我发现该错误是由急切加载角色(Enum 强制转换列)引起的,而不是由 paginate() 引起的。我可以简单地删除枚举铸造,一切都会正常工作。但是有没有一种方法可以在转换 Enum 的同时仍然使用预加载? 我建议您创建一个角色表,其中包含字段 id、name、slug、level 迁移应该如下所示 public function up(): void { Schema::create('roles', function (Blueprint $table) { $table->id(); $table->string('slug')->unique(); $table->string('name'); $table->unsignedTinyInteger('level'); $table->timestamps(); $table->softDeletes(); }); } 和用户表 public function up(): void { Schema::create('users', function (Blueprint $table) { $table->bigIncrements('id'); $table->unsignedTinyInteger('role_id')->index(); $table->string('username')->unique(); $table->string('email')->unique(); $table->timestamp('email_verified_at')->nullable(); $table->string('password'); $table->rememberToken(); $table->timestamps(); $table->softDeletes(); }); } 您可以自由地个性化一切 然后,必须根据您的需要来管理模型上的关系,在这些示例中,用户只有一个角色,我设置级别字段以便稍后能够对您的角色进行优先级排序。 在角色模型中,放置这些线 public function users(){ return $this->hasMany(User::class); } 在用户模型中,放置这些行 public function role(){ return $this->belongsTo(Role::class); } 那么你可以做 $users = User::with('role') ->paginate(10) ->withQueryString();
我发现两种不同的方法来实现单例模式,它们是延迟初始化和急切初始化。代码是: 公共类 EagerSingleton { 私人静态最终 EagerSingl...
我有一桌有很多预订的餐厅。现在我想查询所有餐厅,如果他们有 2 人的预订,则应该预加载这些关联。万一...
如何在Entity Framework中实现多个Inclusion?
我使用实体框架 6。我有一个带有多个导航属性的 Transaction 对象。使用多个 Include 很容易实现预加载。 var aa = db.Transactions.Include(p => p.A...
我想在 Sequelize 查询的 findOptions 接口中包含嵌套模型,以便我可以设置条件,但我不希望它们显示为结果。我知道已经有人问过这个问题了,但是...
Sequelize (node.js) - 渴望从连接表中的附加外键加载模型
我遇到了一个问题 - 我想立即加载 M:N 关系的连接表中包含的附加模型。我尝试了一些方法,但无法让它发挥作用。 设置: 常量用户 =
在 Laravel 中使用 SQL ROW_NUMBER 应用雄辩的热切限制查询
正如 @JonasStaudenmeir 在 Laravel Eager Loading with Limit 上的回答,该查询如下所示: 用户::选择('id') ->与([ 'posts' => fn($query) => $query->select(['id', 'user_i...
Flutter:有没有办法用 riverpod 进行预加载?
我有一个包含两个屏幕的应用程序:Home 和 List_of_items。主页首先显示,并有一个路由到 List_of_items 的按钮。 List_of_items 使用 riverpod 加载,是的,一个 i... 的列表
加载页面时出现这些错误。 检测到使用预加载 通知 => [:actor] 添加到您的查询:.includes([:actor]) 调用堆栈 .../views/api/notifications/index.json.jbuilder:6 使用
我的产品有称为值的关系,如下所示: 公共函数值() { 返回 $this->hasManyThrough(VariantValue::class, VariantProductOption::class, 'product_id', 'product_opt...
我是 CakePHP 的新手。 获取嵌套字段时遇到问题。我不知道 如果其他人以前遇到过同样的问题。 比如说,我有三个表,其中包含以下字段: 用户 ID
我想优化我的代码,所以我试图只选择我实际需要的那些字段进入 questionBankOptionspart 但问题是我收到了违反完整性约束的错误......
如何在 laravel 的模型中添加 'limit()' 到 $with?
我想为我的模型添加一个急切的负载,但是 - 我想限制相关记录。 我知道如何使用 load(Model::class)->limit(n) 以及关系方法来做到这一点,如下所示:...
为什么 select 在 Laravel 5.7 中无法正常工作?
以下代码运行良好: 发布::与(['用户']) ->获取(); 但是当我尝试使用 select 过滤它时,它在用户关系中返回 null。 Post::with(['user' => function($query){ ...
app\Providers\AppServiceProvider.php 中的 preventLazyLoading() 不起作用
我有以下代码,但即使我在本地开发环境中也不会抛出异常 $user = User::findOrFail(34); $用户->视频; 应用\供应商\AppServiceProvider.php .....