Spring HazelCast我无法从缓存中获取数据

Spring HazelCast我无法从缓存中获取数据,spring,hazelcast,Spring,Hazelcast,我在我的Spring Boot应用程序中使用HazelCast,我认为缓存有问题,因为应用程序仍然向DB请求select。我假定它不从缓存中读取。请找到我的配置和我的类。另外,我在BaseEntity之后实现了继承,并嵌入了对象。我的最后一个实体看起来: @Transient private Long age; private boolean agreedWithPolicy; @EqualsAndHashCode.Exclude @ToString.Exclude @OneToMany(m

我在我的Spring Boot应用程序中使用HazelCast,我认为缓存有问题,因为应用程序仍然向DB请求select。我假定它不从缓存中读取。请找到我的配置和我的类。另外,我在BaseEntity之后实现了继承,并嵌入了对象。我的最后一个实体看起来:

@Transient
private Long age;

private boolean agreedWithPolicy;

@EqualsAndHashCode.Exclude
@ToString.Exclude
@OneToMany(mappedBy = "customer")
private Set<Ticket> tickets = new HashSet<>();

@EqualsAndHashCode.Exclude
@ToString.Exclude
@OneToMany(mappedBy = "customer")
private Set<LoyaltyCard> loyaltyCard;

@Override
public int getFactoryId() {
    return 1;
}

@Override
public int getClassId() {
    return 1;
}

@Override
public void writeData(ObjectDataOutput out) throws IOException {
    out.writeLong(getId());
    out.writeUTF(name);
    out.writeUTF(surname);
    out.writeUTF(password);
    out.writeUTF(email);
    out.writeObject(birthDate);
}

@Override
public void readData(ObjectDataInput in) throws IOException {
    setId(in.readLong());
    name = in.readUTF();
    surname = in.readUTF();
    password = in.readUTF();
    email = in.readUTF();
    birthDate = in.readObject();
}

}

项目中的每个实体在BaseEntity之后插入:

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedBy;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;

import javax.persistence.*;
import java.time.LocalDateTime;

@Data
@NoArgsConstructor
@AllArgsConstructor
@SuperBuilder
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)

public class BaseEntity {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private boolean deleted;

    @CreatedDate
    private LocalDateTime createdDate;

    @LastModifiedDate
    private LocalDateTime lastModifiedDate;

    @LastModifiedBy
    private String lasModifiedBy;
}


import lombok.*;
import lombok.experimental.SuperBuilder;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;

import javax.persistence.*;
import java.time.LocalDate;
import java.util.HashSet;
import java.util.Set;
User是我嵌入的一个类: @资料 @诺尔格构装师 @AllArgsConstructor @超级建筑商 @实体 @ToStringcallSuper=true @EqualsAndHashCodecallSuper=true @EntityListenerSauditingTityListener.class

public class User extends BaseEntity {
    protected String name;

    protected String surname;

    protected String password;

    protected String email;

    protected LocalDate birthDate;

    private boolean blocked;

    protected String activationCode;

    @ManyToMany(fetch = FetchType.EAGER, cascade = {CascadeType.PERSIST, CascadeType.DETACH, CascadeType.MERGE, CascadeType.REFRESH})
    private Set<Role> roles = new HashSet<>();

    @EqualsAndHashCode.Exclude
    @ToString.Exclude
    @ManyToMany(mappedBy = "users")
    private Set<Address> addresses = new HashSet<>();
}



import com.hazelcast.nio.ObjectDataInput;
import com.hazelcast.nio.ObjectDataOutput;
import com.hazelcast.nio.serialization.IdentifiedDataSerializable;
import lombok.*;
import lombok.experimental.SuperBuilder;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;

import javax.persistence.*;
import java.io.IOException;
import java.util.HashSet;
import java.util.Set;
public class Customer extends User implements IdentifiedDataSerializable {

    @Transient
    private Long age;

    private boolean agreedWithPolicy;

    @EqualsAndHashCode.Exclude
    @ToString.Exclude
    @OneToMany(mappedBy = "customer")
    private Set<Ticket> tickets = new HashSet<>();

    @EqualsAndHashCode.Exclude
    @ToString.Exclude
    @OneToMany(mappedBy = "customer")
    private Set<LoyaltyCard> loyaltyCard;

    @Override
    public int getFactoryId() {
        return 1;
    }

    @Override
    public int getClassId() {
        return 1;
    }

    @Override
    public void writeData(ObjectDataOutput out) throws IOException {
        out.writeLong(getId());
        out.writeUTF(name);
        out.writeUTF(surname);
        out.writeUTF(password);
        out.writeUTF(email);
        out.writeObject(birthDate);
    }

    @Override
    public void readData(ObjectDataInput in) throws IOException {
        setId(in.readLong());
        name = in.readUTF();
        surname = in.readUTF();
        password = in.readUTF();
        email = in.readUTF();
        birthDate = in.readObject();
    }
}

仅供参考,你发布了完整的代码作为答案

您仍然错过了Hibernate的Spring配置。这是配置二级缓存的地方。目前,Hibernate不会缓存,因为您没有指示它这样做

请检查是否有这种情况

为您的利益复制粘贴到此处:

春天: jpa: 特性: 冬眠: 隐藏物: 使用第二级缓存:true region.factory\u类别:com.hazelcast.hibernate.hazelcastchecacheRegionFactory hazelcast.instance_名称:hazelcast实例 javax.persistence.sharedCache.mode:启用 您还需要使用@org.hibernate.annotations.Cache为要缓存的实体添加注释

请查看其他文档:


从你发布的内容来看,我没有看到任何与缓存相关的内容。请共享整个repo,以及Spring配置、Hazelcast配置等。另外,您的最终代码没有完成类声明。
import com.hazelcast.config.*;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import pl.gut.mateusz.domain.dao.Customer;

@Configuration

public class HazelCastConfig {

    @Bean
    public Config config() {
        Config config = new Config().setInstanceName("HAZELCAST-1")
                .addMapConfig(
                        new MapConfig().setName("movie")
                                .setEvictionConfig(new EvictionConfig()
                                        .setEvictionPolicy(EvictionPolicy.LRU)
                                        .setSize(10000)
                                        .setMaxSizePolicy(MaxSizePolicy.FREE_HEAP_SIZE))
                                .setTimeToLiveSeconds(60 * 60 * 60 * 24))
                .addMapConfig(
                        new MapConfig().setName("repertoire")
                                .setEvictionConfig(new EvictionConfig()
                                        .setEvictionPolicy(EvictionPolicy.LRU)
                                        .setSize(10000)
                                        .setMaxSizePolicy(MaxSizePolicy.FREE_HEAP_SIZE))
                                .setTimeToLiveSeconds(60 * 60 * 60 * 24))
                .addMapConfig(new MapConfig().setName("customer")
                        .setEvictionConfig(new EvictionConfig()
                                .setEvictionPolicy(EvictionPolicy.LRU)
                                .setSize(10000)
                                .setMaxSizePolicy(MaxSizePolicy.FREE_HEAP_SIZE))
                        .setTimeToLiveSeconds(60 * 60 * 60 * 24));

        config.getSerializationConfig().addDataSerializableFactory(1, id -> id == 1 ? new Customer() : null);
        return config;
    }
}