this article을 참조하여 스프링 데이터 JPA에서 유형 JOINED
의 데이터베이스 상속을 시도하고 있습니다. 이것은 잘 동작했다. 하지만 내 프로젝트에 MappedSuperClass
구현해야합니다. 나는 다음과 같은 방식으로 구현했습니다 :MapperSuperClass를 사용하여 Spring 데이터 JPA에서 데이터베이스 상속을 구현하는 방법은 무엇입니까?
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> { }
내가 테스트 케이스의 Super1
개체를 저장하기 위해 노력하고있어 :
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
.......
Super1Impl
에서 @PrimaryKeyJoinColumn(name = "id", referencedColumnName = "id")
을 시도하지만, 여전히 같은 오류가 발생 : 10
@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));
}
그러나 나는 다음과 같은 오류를 받고 있어요.
BaseRepository 및 Super1Repository를 제외한 모든 코드가 유지되었습니다. 객체를 저장 한 후에 객체를 받으면 Super1 유형으로 지정합니다. 저장소에 대한 언급이 없습니다. 도와주세요. – User1230321
귀하의 의견을 이해할 수 없습니다. [Here] (https://github.com/manish-in-java/stackoverflow-questions/tree/master/41090908)는 수정 된 샘플 프로젝트입니다. 유닛 테스트를'mvn clean test'로 실행하면 잘 돌아가는 것을 볼 수 있습니다. 코드를 원래 코드로 변경하면 질문에서 언급 한 오류가 즉시 나타납니다. – manish
위대한 작품. 나에게 많은 것을 의미한다. – User1230321