1

Spring MVCを使用してWebサイトをコーディングしましたが、管理者が管理できるように、バックエンド(つまり、ダッシュボードまたはCMS)をコーディングしたいと思います。

フロントエンド用にすべてのDAOをコーディングしたので、バックエンドで再利用したいと思います(DBテーブルは明らかに同じであるため、フロントエンドとバックエンドは同じ永続コンテキストを共有します)。

私のアイデアは、バックエンドを新しいWebアプリケーションとしてコーディングすることでした。ここで、DAOとドメインオブジェクトはフロントエンドからjarファイルとしてエクスポートされ、バックエンドプロジェクトにインポートされました。永続性はJPAとHibernateによって管理され、すべてのDAOクラスは次のようになります。

@Repository
public class UserDao {
    private EntityManager em;

    // ... Methods...

    @PersistenceContext
    void setEntityManager(EntityManager entityManager) {
        this.em = entityManager;
    }
}

バックエンドWebサイトの永続性構成(つまり、JPA + Hibernate + MySQL)は、フロントエンドの永続性構成とまったく同じです。この構成がJARファイルにインポートされているDAOに注入されることを期待していましたが、これは明らかに発生していません。いずれかのDAOでいずれかのメソッドを使用しようとすると、次のような例外が発生します。

org.hibernate.hql.ast.QuerySyntaxException:UserJpaがマップされていません[SELECT u FROM UserJpa u WHERE u.alias =:alias AND u.closed = false]

この問題を解決するための解決策はありますか?または、私が達成したいことへのより良いアプローチがありますか(つまり、同じフロントエンドDAOを使用してバックエンドをコーディングします)?

どうもありがとうございます!

4

4 に答える 4

3

ユーザーと管理者の役割ベースのアクセスを使用して、両方の UI を単一のアプリケーションとして展開できないのはなぜだろうか。すでに Spring を使用しているため、ロールごとに管理ページへのアクセスを制限するには、ここで Spring Security を選択するのが自然です。バックエンドを書き換える理由

于 2012-06-03T13:32:52.170 に答える
0

UserJpaはマップされていません[SELECTuFROM UserJpa u WHERE u.alias =:alias AND u.closed = false]

最初のアプリケーションのマッピング構成を2番目のアプリケーションに含めるのを忘れたようです。UserJpa2番目のアプリケーションのJPAランタイムが、クラスに関してすべて同じ構成になっていることを確認してください。

于 2012-06-03T16:40:19.750 に答える
0

Hibernate アノテーションまたは XML 構成を使用して OR マッピングを行っていますか? 前者の場合、Hibernate SessionFactory の packagesToScan プロパティは UserJpa クラスを認識していません。おそらく、ロードしていると思われる JAR をロードしていないためです。後者の場合、hibernate.cfg.xml またはそれに相当するものをインポートできません。

于 2012-06-03T16:43:40.077 に答える
0

Hibernate はすべてのエンティティをロードしてデータベースを操作するか、新しい構成ファイル内のエンティティを除外する必要があるため、エンティティ クラスもエクスポートする必要があります。

Spring Securityについて 独自のログインページを使うことをお勧めしますが、ホームページが異なります。ロールごとに異なるホームページを設定できると思います

于 2012-06-03T16:32:10.643 に答える