Spring 데이터 JPA 1.4.3.RELEASE with Hibernate 4.2.7.Final Base Repository 클래스를 성공적으로 만들 수있었습니다. : 내가 함께 작업을 성공적으로 할 수 있어요 http://docs.spring.io/spring-data/jpa/docs/1.4.2.RELEASE/reference/html/repositories.html#repositories.custom-behaviour-for-all-repositories일반 스프링 데이터 클래스 유형별로 데이터를로드하는 JPA 저장소 구현
@NoRepositoryBean
public interface BaseRepository <T extends BaseEntity, ID extends Serializable>
extends JpaRepository<T, ID>
@NoRepositoryBean
public class BaseRepositoryImpl<T extends BaseEntity, ID extends Serializable>
extends SimpleJpaRepository<T, ID> implements BaseRepository<T, ID> {
: 이제
public interface FlowerRepository extends BaseRepository<Flower, Long> {
, 내가 일반적인 구현을 작성하는 것을 시도하고는 모든 참조 다를로드 (즉, 기본 저장소를 확장) 꽃과 같은 종류. 모든 단일 "유형"데이터 또는 "참조"데이터에 대한 저장소를 갖고 싶지 않기 때문입니다. 내가 관리 할 수 있도록 원하는 특정 "클래스"유형 (즉, 참조 데이터 유형에 특정한 인터페이스를 구현) .FOR 예
loadAll(FlowerType.class)
내가 너무 최대 절전 모드 엔티티를 매핑 할 HBMs를 사용하여 전달하여 일반적인 저장소를 사용 내가 가진 :
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="xxx.FlowerType" table="FLWTYP">
<meta attribute="extends" inherit="false">xxx.BaseReferenceType</meta>
<id name="primaryKey" type="string">
<column name="TYP_CDE" length="5" />
<generator class="assigned" />
</id>
public class FlowerType extends BaseReferenceType<String> implements ReferenceEntity<String>
public abstract class BaseReferenceEntity<T extends Serializable> extends BaseEntity implements
ReferenceEntity<T>
public abstract class BaseEntity implements DomainEntity
public interface ReferenceEntity<PK extends Serializable> {
지속성 XML :
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.0"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
<persistence-unit name="xxxPU"
transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<shared-cache-mode>ENABLE_SELECTIVE</shared-cache-mode>
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.Oracle10gDialect" />
<property name="hibernate.hbm2ddl.auto" value="none" />
<property name="hibernate.ejb.naming_strategy" value="org.hibernate.cfg.ImprovedNamingStrategy" />
<property name="hibernate.connection.charSet" value="UTF-8" />
<property name="hibernate.jdbc.batch_size" value="100" />
<property name="hibernate.show_sql" value="false" />
<property name="hibernate.format_sql" value="false" />
<property name="hibernate.transaction.flush_before_completion"
value="false" />
<property name="hibernate.connection.autocommit" value="false" />
<property name="hibernate.ejb.cfgfile" value="hibernate.cfg.xml"/>
<property name="jadira.usertype.autoRegisterUserTypes" value="true" />
<property name="jadira.usertype.databaseZone" value="jvm" />
<property name="jadira.usertype.javaZone" value="jvm" />
</properties>
</persistence-unit>
</persistence>
최대 절전 모드 설정 :
내가 가진: 6,
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<mapping resource="FlowerType.hbm.xml"/>
<mapping resource="Flower.hbm.xml"/>
</session-factory>
</hibernate-configuration>
그래서 나는에 따라 몇 가지 작업을 몇 가지 튜토리얼 링크를 보았고, SO 게시물과 한
하십시오 예외와 함께 종료 @NoRepositoryBean
public interface CustomReferenceDataRepository<T extends BaseEntity & ReferenceEntity<PK>, PK extends Serializable> {
public Map<PK, T> findAll(Class<T> clz);
}
public interface ReferenceDataRepository extends BaseRepository, CustomReferenceDataRepository {
}
public class ReferenceDataRepositoryImpl<T extends BaseEntity & ReferenceEntity<PK>, PK extends Serializable>
implements CustomReferenceDataRepository<T, PK> {
@PersistenceContext
private EntityManager em;
@Override
public Map<PK, T> findAll(Class<T> clz) {
//do whatever
return null;
}
}
Caused by: java.lang.IllegalArgumentException: Not an managed type: class xxx.BaseEntity
at org.hibernate.ejb.metamodel.MetamodelImpl.managedType(MetamodelImpl.java:200) ~[hibernate-entitymanager-4.2.7.Final.jar:4.2.7.Final]
at org.springframework.data.jpa.repository.support.JpaMetamodelEntityInformation.<init>(JpaMetamodelEntityInformation.java:68) ~[spring-data-jpa-1.4.3.RELEASE.jar:na]
at org.springframework.data.jpa.repository.support.JpaEntityInformationSupport.getMetadata(JpaEntityInformationSupport.java:65) ~[spring-data-jpa-1.4.3.RELEASE.jar:na]
at org.springframework.data.jpa.repository.support.JpaRepositoryFactory.getEntityInformation(JpaRepositoryFactory.java:146) ~[spring-data-jpa-1.4.3.RELEASE.jar:na]
나는 Hibernate가 "BaseE ntity "그러나 내가 무엇을 놓치고 있는지 알 수 없다.
가능한 경우 참조 데이터를위한 일반적인 저장소를 구현해야합니까? 예인 경우 무엇이 잘못 되었나요? 모든 안내가 감사하겠습니다. 감사합니다. .
당신이 당신에게 JPA 구성을 붙여 넣을 수 있습니다 주석을 사용하려고 그냥 설정 packagesToScan 특성 수 있습니까? –
가 추가되었습니다. 고맙습니다 .. – souser