我知道這裏已經有很多關於這個的問題了,但其中大多數是指XML配置,我正在使用註釋。我的IDE是IntelliJ,我使用Gradle作爲我的編譯系統。只讀模式下不允許彈出寫操作
所以我有一個非常簡單的Web服務,我想啓用登錄和註冊功能。吾道看起來是這樣的:
public class UserDAO implements IUserDAO {
@Autowired
private HibernateTemplate hibernateTemplate;
@Override
public void addUser(User user) {
hibernateTemplate.save(user);
}
@Override
public User findByUsername(String username) {
return hibernateTemplate.execute(session -> (User)
session.createCriteria(User.class)
.add(Restrictions.eq("username", username))
.uniqueResult());
}
}
而且我的配置是這樣的:
@Configuration
@EnableTransactionManagement
public class AppConfig {
@Bean
public IUserDAO userDAO() {
return new UserDAO();
}
@Bean
public HibernateTemplate hibernateTemplate() {
return new HibernateTemplate(sessionFactory());
}
@Bean
public SessionFactory sessionFactory() {
return new LocalSessionFactoryBuilder(getDataSource())
.addAnnotatedClasses(User.class)
.buildSessionFactory();
}
@Bean
public DataSource getDataSource() {
BasicDataSource dataSource = new BasicDataSource();
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://example.com:3306/myDatabase");
dataSource.setUsername("myUser");
dataSource.setPassword("myUser123");
return dataSource;
}
@Bean
public HibernateTransactionManager hibTransMan() {
return new HibernateTransactionManager(sessionFactory());
}
}
我用這個在我RestController
得到DAO:
@Autowired
private IUserDAO userDAO;
執行findByUsername
工程確定並返回與給定用戶名匹配的User
。然而,addUser
方法不工作,並給了我這個錯誤:
Write operations are not allowed in read-only mode (FlushMode.MANUAL): Turn your Session into FlushMode.COMMIT/AUTO or remove 'readOnly' marker from transaction definition.
我環顧四周,發現我要補充@Transactional(readOnly = false)
我的功能,所以我做了(我加了上面我addUser
功能,如果這甚至把它...)正確的地方,但後來我得到這個錯誤:
No qualifying bean of type [org.springframework.transaction.PlatformTransactionManager] is defined: expected single matching bean but found 2: hibTransMan,transactionManager
誰能幫助我這種情況呢?另外,對於任何IntelliJ用戶,我的UserDAO中的@Autowired
註釋會被標記爲帶有Autowired members must be defined in the valid spring bean(@Component/@Service,etc.)
的警告。任何人都知道這是爲什麼發生?
P.S.如果有人通過Lambda表達式我findByUsername
方法一震,我使用Java 8
您是否在項目結構中配置了Spring構面?如果你沒有配置它,IntelliJ不會知道UserDao實際上被用作Spring Bean(它在你的AppConfig類中定義),因此它會顯示警告。 – 2014-12-07 22:39:41
我確實,是的。起初,它沒有配置,我得到了更多的這些錯誤,然後我設置了它們,其中大部分都沒有了,但是這個仍然存在。此外,它旁邊有一個圖標「導航到自動佈線的依賴關係」。如果我點擊它,它會將我帶到我的AppConfig文件中,在那裏定義我的'hibernateTemplate'方法,就像它應該那樣。 – Squeazer 2014-12-07 22:43:04