私はhiberanateでスプリングブートの基本アノテーション設定を学び、自分自身を常にうまくいくテンプレートにしようとしています。 私はSTS(スプリングツールスイート)でスプリングブート最新リリースバージョン1.51を使用しています。スプリングブート+ハイバネート - エンティティがマップされていない+コンフィギュレーションに最適な方法
がここに私のメインです:今
@SpringBootApplication
@EnableAutoConfiguration
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
、私は@SpringBootApplicationがautomaticaly @componetScanが付属していることを知って、 はので、私はそれを追加しませんでした。
私のコンフィギュレーションクラス:
@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(entityManagerFactoryRef = "someEntityManagerFactory", transactionManagerRef = "someTransactionManager", basePackages = {
"com.example.*" })
@EntityScan(basePackages = "com.demo.models")
@ConfigurationProperties(prefix = "mysql.datasource")
public class DataBaseConfig {
@Autowired
private Environment env;
@Bean
public DataSource someDataSource() {
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName(env.getProperty("mysql.datasource.driver-class-name"));
dataSource.setUrl(env.getProperty("mysql.datasource.url"));
dataSource.setUsername(env.getProperty("mysql.datasource.username"));
dataSource.setPassword(env.getProperty("mysql.datasource.password"));
return dataSource;
}
@Bean
public LocalContainerEntityManagerFactoryBean someEntityManagerFactory() {
LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();
em.setDataSource(someDataSource());
em.setPackagesToScan(new String[] { "org.openlegacy.analytics.models" });
JpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
em.setJpaVendorAdapter(vendorAdapter);
em.setJpaProperties(additionalProperties());
return em;
}
@Bean
public PlatformTransactionManager someTransactionManager() {
JpaTransactionManager tm = new JpaTransactionManager();
tm.setEntityManagerFactory(someEntityManagerFactory().getObject());
tm.setDataSource(someDataSource());
return tm;
}
Properties additionalProperties() {
Properties properties = new Properties();
properties.setProperty("hibernate.hbm2ddl.auto", env.getProperty("spring.jpa.hibernate.ddl-auto"));
properties.setProperty("hibernate.dialect", env.getProperty("spring.jpa.properties.hibernate.dialect"));
properties.setProperty("spring.jpa.show-sql", env.getProperty("spring.jpa.show-sql"));
properties.setProperty("spring.jpa.hibernate.naming.physical-strategy",
env.getProperty("spring.jpa.hibernate.naming.physical-strategy"));
return properties;
}
}
私のコントローラクラス
私のリポジトリクラス
@Transactional
@Repository
public class UserRepository {
@PersistenceContext
private EntityManager entityManager;
@SuppressWarnings("unchecked")
public List<User> getUsers() {
return entityManager.createQuery("select u from User u").getResultList();
}
public String getMessage() {
return "hello";
}
}
私のエンティティクラス
@Entity(name = "user")
public class User implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;
@Column(name = "user_name")
private String userName;
@Column(name = "password")
private String password;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
と私の性質は
# DataSource settings: set here your own configurations for the database connection.
mysql.datasource.username=openlegacy
mysql.datasource.password=openlegacy
mysql.datasource.driver-class-name=com.mysql.jdbc.Driver
mysql.datasource.url=jdbc:mysql://localhost:3306/olbank
spring.jpa.database= MYSQL
spring.data.jpa.repositories.enabled=true
#spring.jpa.database-platform=org.hibernate.dialect.MYSQL5Dialect
# Show or not log for each sql query
spring.jpa.show-sql = true
# Hibernate ddl auto (create, create-drop, update)
spring.jpa.hibernate.ddl-auto = update
# Naming strategy
#spring.jpa.hibernate.naming.strategy= org.hibernate.cfg.ImprovedNamingStrategy
spring.jpa.hibernate.naming.physical-strategy= org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
# The SQL dialect makes Hibernate generate better SQL for the chosen database
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5Dialect
とするとき、私はこのエラーを取得していますユーザテーブル からreteiveデータに抱き合わせてるファイル:
org.hibernate.hql.internal.ast.QuerySyntaxException: User is not mapped...
を
だから、 私の質問は:
- なぜこのエラーが発生していますか?私はそのユーザーが クラス名でマッピングされていることを知っています。それが私がやっていることです。
- これはspring-bootで休止状態を設定する最も良い方法ですか?ベストプラクティスでコードを書くことが重要です。
私はそれから学ぶことができるので詳細な回答をしてください。 有用な情報は歓迎です:) ありがとうございます。
あなたの@EntityScanアノテーションは、basePackages = "com.demo.models"を示します。あなたのUserエンティティは実際にそのパッケージに入っていますか? –
はい、それは "com.demo.models"パッケージ--Mです。 Rizzo –
素晴らしい。あなたのDemoApplicationはどのパッケージですか? –