4 回答

TA貢獻1785條經驗 獲得超4個贊
我發現那里有很多錯誤:
第一名
添加@Id注釋到msisdn
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private String Msisdn;
第二名
添加@Repository注釋到OffersRepository
@Repository
public interface OffersRepository extends CrudRepository<Offers, String> {
List<Offers> findByStatus(String Status);
Offers findByMsisdn(String Msisdn);
}
第三名
將類型的自動裝配 bean 添加OffersRepository到您的類中,并從您的方法中AccessingDataJpaApplication刪除參數OffersRepository repositorypublic CommandLineRunner demo(OffersRepository repository)
@SpringBootApplication
public class AccessingDataJpaApplication {
private static final Logger log = LoggerFactory.getLogger(AccessingDataJpaApplication.class);
@Autowired
private OffersRepository repository;
public static void main(String[] args) {
SpringApplication.run(AccessingDataJpaApplication.class);
}
@Bean
public CommandLineRunner demo() {
return (args) -> {
// fetch by status =0
log.info("Offers found with findByStatus('0'):");
log.info("--------------------------------------------");
repository.findByStatus("0").forEach(on -> {
log.info(on.toString());
});
log.info("");
};
}
}
第四名
如果你想使用CommandLineRunner,你需要實現它。您可以通過非常簡單的方式完成,只需在引導類中實現即可。
AccessingDataJpaApplication.java
@SpringBootApplication
public class AccessingDataJpaApplication implements CommandLineRunner {
@Autowired
private OffersRepository repository;
private static final Logger log = LoggerFactory.getLogger(AccessingDataJpaApplication.class);
public static void main(String[] args) {
SpringApplication.run(AccessingDataJpaApplication.class);
}
@Override
public void run(String...args) {
log.info("Offers found with findByStatus('0'):");
log.info("--------------------------------------------");
repository.findByStatus("0").forEach(on - >{
log.info(on.toString());
});
log.info("");
}
}

TA貢獻1859條經驗 獲得超6個贊
您缺少一個用 注釋的字段@Id。每個都@Entity需要一個@Id- 這是數據庫中的主鍵。在您的實體類上指定注釋,例如:
@Entity
@Table(name = "OFFERS")
public class Offers {
? ?@Id
? ?@GeneratedValue(strategy=GenerationType.AUTO)
? ?@Column(name = "Msisdn")
? ?private String Msisdn;
? ?@Column(name = "Entry_Date")? ?
? ?private String Entry_Date;
? ?@Column(name = "Start_Date")
? ?private String Start_Date;
? ?@Column(name = "End_Date")
? ?private String End_Date;
? ?@Column(name = "Service_Type")
? ?private String Service_Type;
? ?@Column(name = "Status")
? ?private String Status;
? ?@Column(name = "Parm_1")
? ?private String Parm_1;
? ?@Column(name = "Parm_2")
? ?private String Parm_2;
? ?@Column(name = "Parm_3")
? ?private String Parm_3;
? ?@Column(name = "Process_Date")
? ?private String Process_Date;
? ?//Setters and getters
}
如果您的列和表名稱遵循隱式命名策略,則可以不使用注釋指定表和列。
@Id 注釋的放置標記了持久性狀態訪問策略。該標識符唯一標識該表中的每一行。默認情況下,假定表的名稱與實體的名稱相同。要顯式給出表的名稱或指定有關表的其他信息,我們將使用 javax.persistence.Table 注釋。邏輯名稱可以由用戶顯式指定(例如使用 @Column 或 @Table),也可以由用戶顯式指定??梢杂?Hibernate 通過 ImplicitNamingStrategy 契約隱式確定。

TA貢獻1862條經驗 獲得超6個贊
你需要這樣做:
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private String Msisdn;
添加回答
舉報