MSSQL: Why does findAll not working after I have update the entity - Spring Boot JPA

Viewed 148

I have 3 entities.

    @Data
    public class Data {
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        private long id;
    
        private String OrderNumber;
        private String ValveName;
        private String SerialNumber;
        private String ValvePort;
        private String TestNumber;
        private String ValveType;
        
        @OneToOne(orphanRemoval = true, cascade = CascadeType.ALL)
        private Current current;

        @OneToOne(orphanRemoval = true, cascade = CascadeType.ALL)
        private Flow flow;

And these two childs looks like this:

@Setter
@Getter
public class Current{
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long id;
    
    private float s0;
    private float s1;
    private float s2;
    private float s3;

And this

@Setter
@Getter
public class Flow {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long id;
    
    private float f0;
    private float f1;
    private float f2;
    private float f3;

Expection:

When I save a new data, I will both save these two childs at the same time. The data is an object

Data data = new Data();
Flow flow = new Flow();
Current current = new Current ();

// Do some logic and fill the values for flow and current object and also data object
// Also include current and flow into data object
data.setCurrent(current);   
data.setFlow(flow); 

// Save to the database
data_Repository.save(data);

Also, if I change the fields in the data, I will just update both current and flow.

Problems:

When I pick up an data-object and then change one parameter, then I save it.

Then this will not work.

@Repository
public interface Data_Repository extends JpaRepository<Data, Long> {

    @Transactional
    @Query(value = "SELECT * FROM data WHERE LOWER(order_number) LIKE LOWER(CONCAT('%', :orderNumber,'%')) AND LOWER(valve_name) LIKE LOWER(CONCAT('%', :valveName,'%')) AND LOWER(serial_number) LIKE LOWER(CONCAT('%', :serialNumber,'%')) AND LOWER(valve_port) LIKE LOWER(CONCAT('%', :valvePort,'%')) AND LOWER(test_number) LIKE LOWER(CONCAT('%', :testNumber,'%')) AND LOWER(valve_type) LIKE LOWER(CONCAT('%', :valveType,'%')) ORDER BY id DESC OFFSET 0 ROWS FETCH NEXT :maxLog ROWS ONLY", nativeQuery = true)
    List<Data> findByMultipleValues(@Param("orderNumber") String orderNumber, @Param("valveName") String valveName, @Param("serialNumber") String serialNumber, @Param("valvePort")  String valvePort, @Param("testNumber") String testNumber, @Param("valveType") String valveType, @Param("maxLog") Integer maxLog);

The problem is this part:

LOWER(order_number) LIKE LOWER(CONCAT('%', :orderNumber,'%')) AND LOWER(valve_name) LIKE LOWER(CONCAT('%', :valveName,'%')) AND LOWER(serial_number) LIKE LOWER(CONCAT('%', :serialNumber,'%')) AND LOWER(valve_port) LIKE LOWER(CONCAT('%', :valvePort,'%')) AND LOWER(test_number) LIKE LOWER(CONCAT('%', :testNumber,'%')) AND LOWER(valve_type) LIKE LOWER(CONCAT('%', :valveType,'%'))

In MySQL, it works perfect!

But in Microsoft SQL...it does not work! Why?

I can still receive these rows by using, but not the repository-command above after I HAVE CHANGED the entity row. Why?

data_Service.findAll();

I'm using Microsoft 2012 SQL Server.

Summerize:

This results that it can give me data, even if I have changed the and saved one data entity.

@Query(value = "SELECT * FROM data ORDER BY id DESC OFFSET 0 ROWS FETCH NEXT :maxLog ROWS ONLY", nativeQuery = true)
    List<Data> findByMultipleValues(@Param("maxLog") Integer maxLog);

This will not give me anything after I have updated one entity. The entities who are not updated, are still there avaiable too see.

@Query(value = "SELECT * FROM data WHERE LOWER(order_number) LIKE LOWER(CONCAT('%', :orderNumber,'%')) AND LOWER(valve_name) LIKE LOWER(CONCAT('%', :valveName,'%')) AND LOWER(serial_number) LIKE LOWER(CONCAT('%', :serialNumber,'%')) AND LOWER(valve_port) LIKE LOWER(CONCAT('%', :valvePort,'%')) AND LOWER(test_number) LIKE LOWER(CONCAT('%', :testNumber,'%')) AND LOWER(valve_type) LIKE LOWER(CONCAT('%', :valveType,'%')) ORDER BY id DESC OFFSET 0 ROWS FETCH NEXT :maxLog ROWS ONLY", nativeQuery = true)
        List<Data> findByMultipleValues(@Param("orderNumber") String orderNumber, @Param("valveName") String valveName, @Param("serialNumber") String serialNumber, @Param("valvePort")  String valvePort, @Param("testNumber") String testNumber, @Param("valveType") String valveType, @Param("maxLog") Integer maxLog);
0 Answers
Related