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;
添加回答
举报