2013-08-07 5 views
0

У меня есть две сущности:Spring JPA данные - Исключить ID столбец из одного параметра объекта

@Entity 
public class Car { 

    @Id 
    private Long id; 

    @OneToOne 
    private Engine engine; 
} 

и другую:

@Entity 
public class Engine { 

    @Id 
    private Long id; 

    @Column 
    private String value1; 

    @Column 
    private String value2; 
} 

В моем jpaRepositoy интерфейс, я хотел бы сделать:

public interface CarRepository extends JpaRepository<Car, Long> { 

    public Car findByEngine(Engine engine); 
} 

Но этот метод не возвращает мою сущность, потому что я создал свой движок:

Engine engine = new Engine("someValue", "someValue"); 

без указания идентификатора двигателя, который хранится в базе данных.

Итак, я хотел бы знать, можно ли исключить столбец, например id? Если нет, то это единственный способ сделать это:

@Query("SELECT c FROM Car c WHERE c.engine.value1 = :value1 and c.engine.value2 = :value2") 
findByEngine(@Param("value1") String value1, @Param("value2") String value2) 

?

Связанные вопрос: Если у меня есть OneToMany отношения вместо OneToOne, как

@Entity 
public class Car { 

    @Id 
    private Long id; 

    @OneToMany 
    private List<Engine> engines; 
} 

Как я могу сделать этот запрос, чтобы иметь что-то вроде (по-прежнему без столбца ID):

public Car findByEngines(List<Engine> engines); 

Большое спасибо !

+0

этот '@Query (" SELECT c FROM car c WHERE c.value1 =: value1 и c.value2 =: value2 ")' неверен jpql-запрос для вашего сценария, у вас нет значения1 и value2 в 'Car 'entity – Elbek

ответ

2

@Query("SELECT c FROM Car c WHERE c.value1 = :value1 and c.value2 = :value2") Это не является правильным запросом jpql для сценария, Вы не value1 и value2 в Car сущности.

Correct один будет:

@Query("SELECT c FROM Car c WHERE c.engine.value1 = :value1 and c.engine.value2 = :value2"). 

Вы можете попробовать этот метод Имя, я думаю, что будет работать:

findByEngineValue1AndEngineValue2(String value1, String value2) 

но для списка один, я не думаю, что вы можете сделать это с единственным именем метода.

+0

Спасибо за ваш ответ. Я сделал ошибку, написав запрос, но я, очевидно, думал о хорошем (c.engine.value1 ...). метод findByEngineValue1AndEngineValue2 работает, спасибо. Для первого списка, что можно сделать в JPQL, пожалуйста? – Matiou

+0

@Matiou, для списка, я не думаю, что вы можете это сделать, я не уверен, что 100% – Elbek

Смежные вопросы