web-dev-qa-db-ja.com

原因:org.hibernate.MappingException:エンティティのマッピングで列が繰り返されました

私はmavenとJBOSSでJPAを処理する初心者ですが、Restfulでアプリケーションを作成すると、DEPLOYを実行して次の問題が発生しました

Caused by: javax.persistence.PersistenceException: [PersistenceUnit: com.company.test_resources_war_1.0-SNAPSHOTPU] Unable to build EntityManagerFactory
     Caused by: org.hibernate.MappingException: Repeated column in mapping for entity: database.Photo column: fid_module (should be mapped with insert = \ "false \" update = \ "false \") "}}

そのステップではなく、すべてのposlesソリューションを確認しますが、何も見つかりませんでした。誰かが私を助けてくれますか?

前もって感謝します

以下に、私が持っているpostgresのSQLコードを示し、マッピングを行いました。

3つのテーブル(アクティビティイベントおよび写真)があり、そのうちの1つ(写真)が他のテーブルを参照しています2(activity and event)が1つの列にある(photo.fid_module

SQLコード(engineデータベース-> Postgresql):

CREATE TABLE activity (
  id_activity integer not null,
  name character varying(150),
  description text,
  CONSTRAINT id_activity_pk PRIMARY KEY (id_activity)
)

CREATE TABLE event (
  id_event integer not null,
  name character varying(150),
  description text,
  date timestamp without time zone,
  CONSTRAINT id_event_pk PRIMARY KEY (id_event)
)

CREATE TABLE photo(
  id_photo integer not null,
  path character varying(150),
  fid_module integer not null,
  CONSTRAINT id_photo_pk PRIMARY KEY (id_photo),
  CONSTRAINT fk_photo_activity FOREIGN KEY (fid_module)
      REFERENCE activity (id_activity) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE NO ACTION,
  CONSTRAINT fk_photo_event FOREIGN KEY (fid_module)
      REFERENCE event (id_event) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE NO ACTION
)

次に、Netbenasを使用してマッピングを行い、次のコードを提供しました(3つのテーブルのマッピングを行いましたが、問題はクラスPhoto.Javaにあります)。

@Entity
@Table(name = "photo")
@XmlRootElement
@NamedQueries({
    @NamedQuery(name = "photo.findAll", query = "SELECT p FROM Photo p"),
    @NamedQuery(name = "photo.findByFidPhoto", query = "SELECT p FROM Photo p WHERE p.fidphoto = :fidphoto"),
    @NamedQuery(name = "photo.findByIdPhoto", query = "SELECT p FROM Photo p WHERE p.idphoto = :idphoto")})
public class Photo implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "id_photo")
    private Integer idPhoto;
    @Column(name = "path")
    private Recurso fidPath;
    @JoinColumn(name = "fid_module", referencedColumnName = "id_activity")
    @ManyToOne(optional = false, fetch = FetchType.LAZY)
    private SliderWebHome fidModule;
    @JoinColumn(name = "fid_module", referencedColumnName = "id_event")
    @ManyToOne(optional = false, fetch = FetchType.LAZY)
    private Publicacion fidModule1;

    public ModuloRecurso() {
    }
    .......
}

私は永続化にJPAを使用しています(ただし、mvn clean installとmvn jboss-as:deployいくつかの休止状態の依存関係を取得します)誰かが私の間違いを教えてくれるか、この問題を解決できますか?ありがとうございました。

16
rodrixd

別の回答で述べたように、あなたのJavaコードは2つのフィールドに同じ結合列名を指定していますが、これは機能しません。

これがJavaコードがあなたのメモから見えるように、netbeansマッピングツールによって生成された場合

Netbenasの助けを借りて行ったマッピングで、次のコードが得られました...

不正なJavaマッピングは、SQLの制約の不適切な組み合わせが原因である可能性があります。

photoテーブルの定義に次のものが含まれています。

  CONSTRAINT fk_photo_activity FOREIGN KEY (fid_module)
      REFERENCE activity (id_activity) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE NO ACTION,
  CONSTRAINT fk_photo_event FOREIGN KEY (fid_module)
      REFERENCE event (id_event) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE NO ACTION

列を作成しようとしますfid_moduleactivityを参照する外部キーとeventを参照する外部キー。これは機能しません。

photoからこれらの両方のテーブルへの外部キーが必要な場合は、2つの異なる列を使用する必要があります。

10
Don Roby

同じ名前でマップされた2つの列があります

 @JoinColumn(name = "fid_module", referencedColumnName = "id_activity")
 @JoinColumn(name = "fid_module", referencedColumnName = "id_event")

名前属性の1つを変更してください!

あなたの例外を見ると、あなたは読むことができます:

Repeated column in mapping for entity
13
gipinani