J'essaie l'héritage de base de données de type JOINED
dans Spring Data JPA, se référant à this article. Cela a bien fonctionné. Mais je dois implémenter MappedSuperClass
dans mon projet. J'ai mis de la manière suivante:Comment implémenter l'héritage de base de données dans Spring Data JPA avec MapperSuperClass?
Base.java
@MappedSuperclass
public abstract class Base {
public abstract Long getId();
public abstract void setId(Long id);
public abstract String getFirstName();
public abstract void setFirstName(String firstName);
}
BaseImpl.java
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
public class BaseImpl extends Base {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String firstName;
...
}
Super1.java
@MappedSuperclass
public abstract class Super1 extends BaseImpl {
public abstract String getSuperName();
public abstract void setSuperName(String guideName);
}
Super1Impl.java
@Entity
public class Super1Impl extends Super1 {
private String superName;
...
}
BaseBaseRepository.java
@NoRepositoryBean
public interface BaseBaseRepository<T extends Base> extends JpaRepository<T, Long> { }
BaseRepository.java
@NoRepositoryBean
public interface BaseRepository<T extends Base> extends BaseBaseRepository<Base> { }
BaseRepositoryImpl.java
@Transactional
public interface BaseRepositoryImpl extends BaseRepository<BaseImpl> { }
Super1Repository.java
@NoRepositoryBean
public interface Super1Repository<T extends Super1> extends BaseBaseRepository<Super1> { }
Super1RepositoryImpl.java
@Transactional
public interface Super1RepositoryImpl extends Super1Repository<Super1Impl> { }
J'essaie de sauver un objet Super1
dans un cas de test:
@Test
public void contextLoads() {
Super1 super1 = new Super1Impl();
super1.setSuperName("guide1");
super1.setFirstName("Mamatha");
super1.setEmail("jhhj");
super1.setLastName("kkjkjhjk");
super1.setPassword("jhjjh");
super1.setPhoneNumber("76876876");
System.out.println(super1Repository.save(super1));
}
Mais je reçois l'erreur suivante:
Caused by: org.springframework.beans.factory.BeanCreationException:
Error creating bean with name 'baseRepositoryImpl':
Invocation of init method failed; nested exception is java.lang.IllegalArgumentException:
This class [class com.example.entity.Base] does not define an IdClass
.....
Caused by: java.lang.IllegalArgumentException: This class [class com.example.entity.Base] does not define an IdClass
.......
Nous avons essayé @PrimaryKeyJoinColumn(name = "id", referencedColumnName = "id")
dans Super1Impl
, mais toujours obtenir la même erreur.
J'ai conservé tout mon code sauf BaseRepository et Super1Repository. Quand je reçois l'objet après l'avoir sauvegardé, je veux qu'il soit de type Super1. Il n'y a aucune mention de cela dans le référentiel. S'il vous plaît aider. – User1230321
Je ne comprends pas votre commentaire. [Ici] (https://github.com/manish-in-java/stackoverflow-questions/tree/master/41090908) est un exemple de projet avec mes corrections. Vous pouvez exécuter des tests unitaires en tant que 'mvn clean test' pour voir ensuite fonctionner correctement. Si vous modifiez le code à votre code d'origine, l'erreur que vous avez mentionnée dans la question apparaîtra immédiatement. – manish
Excellent travail. Signifie beaucoup pour moi. – User1230321