Ich habe meine Entity:Hibernate Kriterien mit EmbeddedId
@Entity
@Table(name="performances")
@AssociationOverrides({
@AssociationOverride(name="id.player", [email protected](name="player_id")),
@AssociationOverride(name="id.season", [email protected](name="season_id"))
})
public class Performance extends AbstractEntity<PerformanceID> {
private static final long serialVersionUID = 1L;
@EmbeddedId
@Getter @Setter
private PerformanceID id;
@Getter @Setter
private int goals;
public Player getPlayer(){
return id.getPlayer();
}
public Season getSeason(){
return id.getSeason();
}
und:
@Embeddable
public class PerformanceID implements Serializable {
private static final long serialVersionUID = 1L;
@ManyToOne(fetch=FetchType.LAZY, targetEntity=Player.class)
@JoinColumn(name="player_id")
@Getter @Setter
private Player player;
@ManyToOne(fetch=FetchType.LAZY, targetEntity=Season.class)
@JoinColumn(name="season_id")
@Getter @Setter
private Season season;
Wie Leistungsnachweise wählen, in dem Spieler Namen 'Claudio' haben? In HQL funktioniert es einfach:
Query query = getSession().createQuery("from Performance where id.player.name = 'Claudio'");
return query.list();
Aber ich muss es durch Criteria API tun. Folgende Code wird fehlschlagen:
Criteria criteria = getSession().createCriteria(Performance.class);
criteria.add(Restrictions.ilike("id.player.name", "Claudio"));
return criteria.list();
org.hibernate.QueryException: id.player.name von: pl.andrzejcichon.criterionlazydatamodel.entities.Performance bei org.hibernate.persister konnte nicht Eigentum lösen .entity.AbstractPropertyMapping.propertyException (AbstractPropertyMapping.java:83) bei org.hibernate.persister.entity.AbstractPropertyMapping.toColumns (AbstractPropertyMapping.java:98) bei org.hibernate.persister.entity.BasicEntityPropertyMapping.toColumns (BasicEntityPropertyMapping .java: 61) bei org.hibernate.persister.entity.AbstractEntityPersister.toColumns (AbstractEntityPersister.java:1912) bei org.hibernate.loader.criteria.CriteriaQueryTranslator.getColumns (CriteriaQueryTranslator.java:523) bei org.hibernate.loader .criteria.CriteriaQueryTranslator.findColumns (CriteriaQueryTranslator.java:538) bei org.hibernate.criterion.LikeExpression.toSqlString (LikeExpression.java:80) bei org.hibernate.loader.criteria.CriteriaQueryTranslator.getWhereCondition (CriteriaQueryTranslator.java : 419) unter org.hibernate.loader.criteria.CriteriaJoinWalker. (KriterienJoinWalker.java:123) unter org.hibernate.loader.criteria.CriteriaJoinWalker. (CriteriaJoinWalker.java:92) bei org.hibernate.loader.criteria.CriteriaLoader. (CriteriaLoader.java:93) bei org.hibernate.internal.SessionImpl.list (SessionImpl.java:1599) bei org.hibernate.internal.CriteriaImpl.list (CriteriaImpl.java:374) bei pl.andrzejcichon.criterionlazydatamodel.repository.impl.PerformanceDatabaseRepository.customList (PerformanceDatabaseRepository.java:29) bei pl .andrzejcichon.criterionlazydatamodel.repository.impl.PerformanceDatabaseRepositoryTest.test (PerformanceDatabaseRepositoryTest.java:24) bei sun.reflect.NativeMethodAccessorImpl.invoke0 (Native Methode) um sun.reflect.NativeMethodAccessorImpl.invoke (unbekannte Quelle) um sun.reflect.DelegatingMethodAccessorImpl.invoke (Unknown Source) bei java.lang.reflect.Method.invoke (Unknown Source) bei org.junit.runners.model.FrameworkMethod $ 1.runReflectiveCall (FrameworkMethod.java:45) bei org.junit.internal.runners.model.ReflectiveCallable.run (ReflectiveCallable.java:15) bei org.junit.runners.model.FrameworkMethod.invokeExplosively (FrameworkMethod.java:42) bei org.junit.internal .runners.statements.InvokeMethod.evaluate (InvokeMethod.java:20) bei org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate (RunBeforeTestMethodCallbacks.java:74) bei org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate (RunAfterTestMethodCallbacks.java:83) bei org.springframework.test.context.junit4.statements.SpringRepeat.evaluate (SpringRepeat.java:72) bei org.springframework.test.context.junit4.SpringJUnit4ClassRunner. runChild (SpringJUnit4ClassRunner.java:231) bei org.junit.runners.BlockJUnit4ClassRunner.runChild (BlockJUnit4ClassRunner.java:47) bei org.junit.runners.ParentRunner $ 3.run (ParentRunner.java:231) bei org. junit.runners.ParentRunner $ 1.schedule (ParentRunner.java:60) um org.junit.runners.ParentRunner.runChildren (ParentRunner.java:229) um org.junit.runners.ParentRunner.access $ 000 (ParentRunner.java: 50) unter org.jun it.runners.ParentRunner $ 2.Bewertung (ParentRunner.java:222) bei org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate (RunBeforeTestClassCallbacks.java:61) bei org.springframework.test.context. junit4.statements.RunAfterTestClassCallbacks.evaluate (RunAfterTestClassCallbacks.java:71) bei org.junit.runners.ParentRunner.run (ParentRunner.java:300) bei org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run (SpringJUnit4ClassRunner. java: 174) bei org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run (JUnit4TestReference.java:50) bei org.eclipse.jdt.internal.junit.runner.TestExecution.run (TestExecution. Java: 38) bei org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests (RemoteTestRunner.java:467) bei org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests (RemoteTestRunner.java:683) bei org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run (RemoteTestRunner.java:390) bei org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main (RemoteTestRunner.java:197)
Der andere Versuch:
Criteria criteria = createCriteria();
criteria.createAlias("id.player", "player");
criteria.add(Restrictions.ilike("player.name", "Claudio"));
return criteria.list();
generieren query:
Hibernate: wählen this_.player_id als player2_1_0_, this_.season_id als season3_1_0_, this_.goals als goals1_0_ aus den Vorstellungen this_ wo player1_.name ilike?
Aber es wird mit SQLGrammarException fehlschlagen: "für Tabellen player1_ FROM-Klausel fehlt"