Spring Boot抽象类bean服务问题



好了,我在一个简单的项目中工作,我以前是这样工作的,它工作得很好,现在它不工作了。我使用java 11, spring-boot-v2.7.0.

下面是我使用的类

@Entity
@Table(name = "premios")
@Inheritance(strategy = InheritanceType.JOINED)
public abstract class Prize implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id_premio")
private Integer id;
@Column(name = "titulo")
private String title;
@Column(name = "descripcion")
private String description;
@Column(name = "fecha_creacion")
private LocalDateTime createDate;
@Column(name = "fecha_actualizacion")
private LocalDateTime updateDate;
//Getters and setters 
///Extended class
@Entity
@Table(name = "carros")
@PrimaryKeyJoinColumn(name = "id_premio")
public class Car extends Prize{
@Column(name = "marca")
private String brand;
@Column(name = "modelo")
private String model;
@Column(name = "anio")
private String year;
///Extended Class
@Entity
@Table(name = "casas")
@PrimaryKeyJoinColumn(name = "id_premio")
public class House extends Prize{
@Column(name = "metros_cuadrados")
private double sqrMeters;
@Column(name = "habitaciones")
private double rooms;
@Column(name = "banios")
private double baths;
@Column(name = "costo_real")
private String actualCost;

这是我的仓库:

@NoRepositoryBean
public interface PrizeRepository extends PagingAndSortingRepository<Prize,Integer> {
Iterable<Prize> findByRaffle_id(Integer id);
}
@Repository("repositoryCar")
public interface CarRepository extends PrizeRepository{
}
@Repository("repositoryHouse")
public interface HouseRepository extends PrizeRepository{
}

我的刀

public interface PrizeDAO extends GenericDAO<Prize> {
Iterable<Prize> findByRaffle_id(Integer id);
}
public interface HouseDAO extends PrizeDAO{
}
public interface CarDAO extends PrizeDAO{
}

和实现:

public class PrizeDAOImpl extends GenericDAOImpl<Prize, PrizeRepository> implements PrizeDAO {

public PrizeDAOImpl(PrizeRepository repository) {
super(repository);
}
@Override
public Iterable<Prize> findByRaffle_id(Integer id) {
return repository.findByRaffle_id(id);
}
}
@Service
public class HouseDAOImpl extends PrizeDAOImpl implements HouseDAO {
public HouseDAOImpl(@Qualifier("repositoryHouse")PrizeRepository repository) {
super(repository);
}
}
@Service
public class CarDAOImpl extends PrizeDAOImpl implements CarDAO {
public CarDAOImpl(@Qualifier("repositoryCar") PrizeRepository repository) {
super(repository);
}
}

问题是,当我试图从house或Cars中提取数据时,我得到的响应是整个类"Prize",所以我得到了两者。我已经尝试用@Service来检测PrizeDAOImp.class并定义一个Primary bean,但问题不断出现。

是否有更好的方法来获得指定类的期望结果,或者我可以修复当前的结构?

修复你的结构

替换:

@Entity
@Table(name = "premios")
@Inheritance(strategy = InheritanceType.JOINED)
public abstract class Prize implements Serializable

@MappedSuperclass
public abstract class Prize implements Serializable

从子类

中删除以下注释
@PrimaryKeyJoinColumn(name = "id_premio")

对于存储库使用:

@Repository("repositoryPrize")
public interface PrizeRepository extends PagingAndSortingRepository<Prize, Integer> {
}
@Repository("repositoryCar")
public interface CarRepository extends PrizeRepository{
}
@Repository("repositoryHouse")
public interface HouseRepository extends PrizeRepository{
}

最新更新