Ich versuche Datenbankvererbung des Typs JOINED
in Spring Data JPA, bezogen auf this article. Das hat gut funktioniert. Aber ich muss MappedSuperClass
in meinem Projekt implementieren. Ich habe in der folgenden Art und Weise umgesetzt:Wie Implementieren der Datenbankvererbung in Spring Data JPA mit 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> { }
Ich versuche, ein Super1
Objekt in einem Testfall zu speichern:
@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));
}
Aber ich bin immer folgende Fehlermeldung:
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
.......
@PrimaryKeyJoinColumn(name = "id", referencedColumnName = "id")
in Super1Impl
ausprobiert, aber immer noch die gleichen Fehler.
Ich habe meinen gesamten Code außer BaseRepository und Super1Repository behalten. Wenn ich das Objekt nach dem Speichern erhalte, möchte ich, dass es vom Typ Super1 ist. Es wird nicht im Repository erwähnt. Bitte helfen Sie. – User1230321
Ich verstehe Ihren Kommentar nicht. [Hier] (https://github.com/manish-in-java/stackoverflow-questions/tree/master/41090908) ist ein Beispielprojekt mit meinen Korrekturen. Sie können Komponententests als 'mvn clean test 'ausführen, um zu sehen, dann gut laufen. Wenn Sie den Code in Ihren ursprünglichen Code ändern, wird der Fehler, den Sie in der Frage erwähnt haben, sofort angezeigt. – manish
Gute Arbeit. Bedeutet mir viel. – User1230321