错误:无法在仅读取的事务中执行INSERT

时间:2019-04-14 19:00:53

标签: java postgresql spring-boot

我正在对我的数据库执行INSERT查询,但是出现标题中描述的错误(从西班牙语翻译)。

我认为问题在于PostgresSQL“了解”正在执行查询的另一个用户,并且没有写权限,但是在application.properties中,我使用的连接参数是数据库管理器系统。

如果我直接在PostgreSQL中执行相同的查询,它将起作用。为什么我从DAO进行查询时为什么不起作用?

DAO:

@Override
    public Object register(String name, String surname, String email, String password) {
    StringBuilder queryStB = new StringBuilder();

    queryStB.append("INSERT INTO Users (user_name,surname,email,user_password,app_admin)"
            + " VALUES (:user_name,:surname,:email,:user_password,:app_admin ) ");



    String queryString = queryStB.toString();

    Query query = entityManager.createNativeQuery(queryString);

    query.setParameter("user_name",name);
    query.setParameter("surname",surname);
    query.setParameter("email",email);
    query.setParameter("user_password",password);
    query.setParameter("app_admin",false);
    return query.getResultList();
}

APPLICATION.PROPERTIES

server.port=8081
## Spring DATASOURCE (DataSourceAutoConfiguration & DataSourceProperties)
spring.datasource.url=jdbc:postgresql://localhost:5432/postgres
spring.datasource.username= postgres
spring.datasource.password=******

# The SQL dialect makes Hibernate generate better SQL for the chosen database
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.PostgreSQLDialect
spring.jpa.properties.hibernate.jdbc.lob.non_contextual_creation=true
# Hibernate ddl auto (create, create-drop, validate, update)
spring.jpa.hibernate.ddl-auto = create-drop

1 个答案:

答案 0 :(得分:0)

休眠EntityManager的createNamedQuery方法仅支持选择查询。这就是错误消息指示的内容。

我还检查了并没有看到有人使用该方法插入或更新查询的示例。