2015-03-19 24 views
15

Tôi đang cố gắng ánh xạ một số lớp Java bằng cách sử dụng triển khai Hibernate JPA. Vấn đề của tôi là tôi không thể sử dụng hardcoded Strings als cột tên. Bạn có thể thấy thông báo lỗi tôi nhận được trong hình bên dưới.JPA Không thể giải quyết cột/IntelliJ

enter image description here

Tôi đang sử dụng OpenJPA như Provider Mặc định JPA của tôi và đã cố gắng để thay đổi nó.

IntelliJ Version 14.0.3

regards,

+1

Sẽ rất hữu ích nếu bạn có thể đánh dấu câu trả lời thứ hai là câu trả lời chính xác. Phiếu bầu là một dấu hiệu khá tốt, rằng điều này là chính xác. ;-) – chkal

Trả lời

51

Bạn phải liên kết nguồn dữ liệu của mình (tạo nguồn dữ liệu trong chế độ xem cơ sở dữ liệu trước - còn gọi là kết nối cơ sở dữ liệu JDBC thực) với một đơn vị lưu trữ hoặc phiên làm việc lâu dài (hibernate.cfg.xml).

Thực hiện theo các bước dưới đây và những lời cảnh báo sẽ biến mất:

  1. Mở cửa sổ công cụ Persistence (Xem | Công cụ của Windows | Persistence).
  2. Nhấp chuột phải vào mô-đun cần thiết, đơn vị lưu giữ hoặc nhà máy phiên và chọn Chỉ định nguồn dữ liệu trong menu ngữ cảnh.
  3. Trong hộp thoại Gán nguồn dữ liệu mở ra, nhấp vào trường Nguồn dữ liệu và chọn nguồn dữ liệu cần thiết. (Để loại bỏ các hiệp hội với nguồn dữ liệu, chọn.)

Xem ở đây: Associating data sources with session factories and persistence units

+5

Câu trả lời đúng, vì nó giải thích hành vi và đưa ra một giải pháp, trong khi bên kia chỉ bảo bạn bỏ qua nó. – sschrass

+1

Vâng, tại sao đây không phải là câu trả lời được chọn? – Amalgovinus

+4

@panos Điều này chỉ sửa lỗi '@ Bảng', nhưng các cột của tôi vẫn hiển thị là không thể giải quyết được. Bất cứ ý tưởng làm thế nào để khắc phục điều đó? –

0

Trên thực tế đây không phải là bất kỳ lỗi có thể ngăn chặn mã của bạn để biên dịch. Có lẽ trình kiểm tra chính tả của bạn đang bật và cung cấp cho bạn lỗi chính tả. Nếu bạn có thể biên dịch mã của mình thì bạn có thể bỏ qua các loại kịch bản này.

Nhìn bạn không nhận được bất kỳ lỗi nào cho văn bản khác như @Column, @GeneratedValue v.v ... Điều đó có nghĩa là các lọ bằng cách sử dụng các loại nội dung này có trong đường dẫn xây dựng của bạn. Vì vậy, tôi nghĩ bạn có thể bỏ qua các loại lỗi này.

+1

Cảm ơn câu trả lời. Nhưng tại sao @Column (name = myConstant) được chấp nhận? myConstant giống như 'chuỗi cuối cùng tĩnh myConstant = "LEC_ID") Không mã hóa các chuỗi và hằng số giống nhau trong Java? – pichlbaer

3

tôi thấy Panos' câu trả lời hữu ích, nhưng tôi không thấy ai đề cập thêm cơ sở dữ liệu như là một nguồn dữ liệu . Có lẽ đó là đủ thường xuyên để được giả định, nhưng nếu không, đây là những gì tôi phải làm:

Chọn Xem/Công cụ Windows/Cơ sở dữ liệu

Cửa sổ cơ sở dữ liệu thường xuất hiện phía trên bên phải.

Trong cửa sổ cơ sở dữ liệu, nhấp vào xanh dấu + và chọn Data Source/MySQL (hoặc bất kỳ hương vị của nguồn dữ liệu bạn đang sử dụng).

Nguồn dữ liệu và trình điều khiển cửa sổ bật lên.

Nếu cơ sở dữ liệu của bạn không được liệt kê ở đó, sử dụng mẫu trống để thêm những điều sau đây:

  • Host: thường localhost, nhưng nếu cơ sở dữ liệu thử nghiệm của bạn đang sống trên máy khác, đưa địa chỉ đó in.
  • Tên người dùng: để sử dụng cơ sở dữ liệu của bạn.

  • Mật khẩu: cho mật khẩu của người dùng cơ sở dữ liệu của bạn.

IDEA có thể cần một số khó khăn khi tìm trình điều khiển JDBC. Tôi đã được nói rằng về lý thuyết nó nên đã tìm thấy nó trong quá trình xây dựng maven cho dự án tôi đã làm việc trên, nhưng nó không. Tôi mở lại Xem/Công cụ Windows/Cơ sở dữ liệu và xem mục nhập MySQL của tôi. Ở dưới cùng, có thông báo lỗi bên cạnh Trình điều khiển: và cũng là liên kết MySQL. Tôi đã nhấp vào liên kết MySQL và IDEA đã xuất hiện cửa sổ bật lên để tìm nạp Trình kết nối/J.

Mặc dù thực tế rằng các hộp kiểm cho Auto cam kếtAuto sync mặc định để kiểm tra và tôi để lại cho họ theo cách đó, IDEA dường như cần một lực đẩy. Hoặc có lẽ nó chỉ mất một lúc và tôi đã mất kiên nhẫn.

Trong mọi trường hợp, trước tiên tôi nhấp đúp vào dòng cho cơ sở dữ liệu của mình theo số Cơ sở dữ liệu. Điều đó dường như làm điều đó, nhưng tôi đã không nhận ra rằng tôi cần Persistence, và trong khi sắp xếp ra, theo gợi ý của đồng nghiệp, tôi cũng đã nhấp vào nút Đồng bộ hóa (hai mũi tên trong một vòng tròn) trên Cơ sở dữ liệu.

Bạn cũng có thể nhấp chuột phải vào cơ sở dữ liệu của mình trong Cơ sở dữ liệu và chọn Đồng bộ hóa.

Có thể mất vài giây, nhưng bạn sẽ thấy IDEA điền vào giản đồ cơ sở dữ liệu trong mục nhập trong Cơ sở dữ liệu.

Cuối cùng tôi tìm thấy câu trả lời của Panos và cố định Persistence.

Chọn Xem/Công cụ Windows/Persistence

Cửa sổ Persistence thường xuất hiện ở phía trên bên trái.

Trong cửa sổ Persistence, nhấp chuột phải vào dự án của bạn và chọn Chỉ định nguồn dữ liệu.

IDEA bật lên hộp thoại có hai cột, dự án của bạn ở cột bên trái và trong trường hợp của tôi là ô trống trong cột bên phải. Nhấp vào ô trống và IDEA sẽ cung cấp cho bạn một menu thả xuống cho phép bạn chọn cơ sở dữ liệu bạn vừa thêm.

Một lần nữa, có thể mất một vài giây để IDEA hoàn tất việc phân tích nguồn dữ liệu và làm lại tất cả các kiểm tra.

+0

Cột bên phải trong Gán Nguồn dữ liệu khó nhìn thấy! Thậm chí không nhận thấy nó cho đến bây giờ! Cảm ơn bạn! – Amalgovinus

0

Nếu bạn đang sử dụng JPA, cũng rất quan trọng để thiết lập Phương ngữ SQL là HSQLDB thay vì MySQL. Điều này thường gây nhầm lẫn bởi vì nó cảm thấy như MySQL là phương ngữ chính xác, nhưng trong thực tế những gì bạn đang đối phó với hibernate là HSQL.

Nếu bạn vừa nâng cấp lên IntelliJ 2017.13 hoặc các dẫn xuất khác của phiên bản này (ví dụ: Webstorm) hoặc bạn vừa mới nhập lại dự án của mình, nó có thể làm hỏng ngôn ngữ và cần phải sửa thủ công.

này có thể được thực hiện thông qua các dự án

Cài đặt -> Ngôn ngữ và khung

phần của IDE.

+0

Điều này là không chính xác, HSQLDB là một cái gì đó gọi là HyperSQL và không liên quan đến ngủ đông. Nhưng nó có vẻ như có một số vấn đề cấu hình sau khi nâng cấp lên IDEA 2017, tôi đã nhận được "không thể giải quyết cột" sau khi nhập cấu hình của tôi vào nó. – Amalgovinus

Các vấn đề liên quan