হাইবারনেটে স্ট্রিংয়ে এনাম ম্যাপিং


93

আমি একটি বিভাগ হাইবারনেট মডেল পেয়েছি:

@Entity
@Table(name = "category")
public class Category {

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    @Column(name = "id")
    private long id;

    @Column(name = "type")
    private String type;

যা একটি টাইপ স্ট্রিং ক্ষেত্র আছে। এছাড়াও আমি একটি জাভা এনাম পেয়েছি যা একটি বিভাগের একটি ধরণের প্রতিনিধিত্ব করে:

public enum CategoryType {
    INCOME, OUTCOME;
}

যা আমি স্ট্রিং টাইপের পরিবর্তে ব্যবহার করতে চাই। এসকিউএল ভার্চার প্যারামিটারে দুটি স্বতন্ত্র মান গ্রহণ করে: হয় CategoryIncomeবা হয় CategoryOutcome। আমি বিভাগের মডেল বর্গটি একটি এনাম ভেরিয়েবলটি গ্রহণ করতে চাই - এবং যখনই হাইবারনেট এটির জন্য জিজ্ঞাসা করবে তখন এটি স্ট্রিংয়ের জন্য কোনওভাবে ম্যাপ করুন।

এটা কি সম্ভব?

উত্তর:


185

হ্যাঁ, সম্ভব এটা করা উচিত:

@Enumerated(EnumType.STRING)
@Column(name = "category_type")
private CategoryType categoryType;

15
আপনি আরও এগিয়ে যেতে পারেন এবং এখন জেপিএ ২.১ প্রকাশিত হওয়ায় ব্যবহার করুন@Converter(autoApply = true) public class CategoryTypeConverter implements javax.persistence.AttributeConverter <CategoryType, String>
সদস্যবৃন্দ

6
কারো জন্য যারা একই সমস্যা থাকতে পারে ..: আমি এই টীকা ভালো মাঠের পরিবর্তে আমার সংগ্রহকারী পদ্ধতি শুরু করা হয় যাতে ছিল: @Enumerated(EnumType.STRING) public CategoryType getCategoryType() { return this.categoryType; }
জিরোঅন

আমি hibernate.ddl-auto=updateমোডে ছিলাম এবং আমার এনামটি ইন্টি থেকে বার্চারে রূপান্তর করতে আমার টেবিলটি ফেলে দিয়ে হাইবারনেট করতে হয়েছিল। আশা করি এটি অনুরূপ সমস্যা সহকারে কাউকে সহায়তা করবে।
আরশসফ্ট

আপনার গণনার মানটি যদি এনওরেটেড এনটোটেশন সত্ত্বেও অধ্যক্ষ হিসাবে রচনা করা হয় তবে stackoverflow.com/questions/44864675/… দেখুন ।
মেটাকমেকার

আমি এটি গেটারে রাখি না। ভেরিয়েবল ডিক্লেয়ারেশনে এটি রাখা ভাল কাজ করে, যা লম্বোকের পক্ষে @ ডেটা ইত্যাদি ব্যবহার করে ভাল I আমি যদি প্রতিটি এনটোট না করে সমস্ত এনামগুলিতে এটি প্রয়োগ করতে চাই তবে কী হবে?
অ্যান্ড্রু

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.