亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何讓EntityManager執行native sql

如何讓EntityManager執行native sql

慕尼黑5688855 2023-03-31 14:52:04
首先,為您可能犯的語法錯誤道歉。我的英文不是很好。我正在創建一個表構造函數來創建動態表。我的問題是 EntityManager 為空,我不知道為什么。我在讀到您可以創建一個帶有entityManagerFactory的 entityManager并傳遞我的 application.properties 中已有的參數?;蛘呶铱梢宰⑷?PersistenceContext 但是當我嘗試執行一個 sql 語句時,EntityManager 為空。我該如何解決?編輯:我做了你所說的一切,接下來展示:LOGGER.DEBUG:CREATE TABLE countries( table_id SERIAL, tsunami int8, mag float8, felt numeric, id varchar(255), time bigint,  primary key (table_id));ERROR:java.lang.NullPointerException: null    at com.project.maps.util.TableGeoJsonGenerator.executeSQL...抱歉,我編輯并添加編輯后的代碼以對所有代碼和版本進行排序:這是我的代碼:@Servicepublic class TableGeoJsonGenerator {    private static final Logger LOGGER = LogManager.getLogger(SchemeService.class);    @Autowired    private EntityManager em;    public TableGeoJsonGenerator() {        super();    }    public void initTable(String name, List<String> columns, List<String> typeColumns, ArrayList<Object> rows) {        createTableWithColumns(name, columns, typeColumns);        addRowsInTable(rows);           }    private void createTableWithColumns(String name, List<String> columns, List<String> typeColumns) {        String SQL = "CREATE TABLE " + name + "( table_id int8 NOT NULL AUTO_INCREMENT, " + generateSqlColumns(columns, typeColumns) +" primary key (table_id));";        LOGGER.debug(SQL);        executeSQL(SQL);    }    private void addRowsInTable(ArrayList<Object> rows) {    }    public String generateSqlColumns(List<String> columns, List<String> typeColumns) {        String DINAMIC_COLUMNS = "";        for (int i=0; i<columns.size(); i++) {            DINAMIC_COLUMNS += columns.get(i).toString() + " " + getPostgresqlValue(typeColumns.get(i).toString()) + ", ";        }        return DINAMIC_COLUMNS;    }
查看完整描述

2 回答

?
慕妹3146593

TA貢獻1820條經驗 獲得超9個贊

@UtilityClass

我猜這是你的問題。取自龍目島文檔。

實用程序類無法實例化。通過使用 @UtilityClass 標記您的類,lombok 將自動生成一個私有構造函數,該構造函數會拋出異常,將您添加的任何顯式構造函數標記為錯誤,并將該類標記為最終類。如果該類是內部類,則該類也被標記為靜態。

我的猜測如下。Spring 只能將 bean 注入到 spring 管理的對象中。您的類TableGeoJsonGenerator不是托管 bean,因為 spring 無法實例化它。

您需要刪除@UtilityClass并添加一個托管 bean 注釋,例如@Service @Controller等等。

在 spring boot中定義 jpa 屬性時application.properties,將自動為您創建一個EntityManager已定義的屬性。

然后可以將其@Autowired放入任何spring managed bean. 您需要先管理您的班級。


查看完整回答
反對 回復 2023-03-31
?
PIPIONE

TA貢獻1829條經驗 獲得超9個贊

你的方法 entityManagerFactory() 在哪里?

我認為: + 首先,創建 EntityManagerFactory

EntityManagerFactory entitymanagerfactory = Persistence.createEntityManagerFactory("your.package");

  • 然后,創建 entityManager :

    public static EntityManager getEntityManager() {   return entitymanagerfactory .createEntityManager(); }

然后 :

    ...

     EntityManager entityManager = getEntityManager();


     em.getTransaction().begin();

     ....


查看完整回答
反對 回復 2023-03-31
  • 2 回答
  • 0 關注
  • 187 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號