আমি জেপিএ ব্যবহার করে এনাম ম্যাপ করার বিভিন্ন উপায় খুঁজছি। আমি বিশেষত প্রতিটি এনামের প্রবেশের পূর্ণসংখ্যা মানটি সেট করতে এবং কেবল পূর্ণসংখ্যার মানটি সংরক্ষণ করতে চাই।
@Entity
@Table(name = "AUTHORITY_")
public class Authority implements Serializable {
public enum Right {
READ(100), WRITE(200), EDITOR (300);
private int value;
Right(int value) { this.value = value; }
public int getValue() { return value; }
};
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "AUTHORITY_ID")
private Long id;
// the enum to map :
private Right right;
}
একটি সহজ সমাধান হ'ল এনিউমটাইপ.অর্ডিনাল সহ গণিত টীকাগুলি ব্যবহার করা:
@Column(name = "RIGHT")
@Enumerated(EnumType.ORDINAL)
private Right right;
তবে এক্ষেত্রে জেপিএ এনাম ইনডেক্স (0,1,2) মানচিত্র করে এবং আমি যে মান চাই তা নয় (100,200,300)।
আমি যে দুটি সমাধান পেয়েছি তা সহজ বলে মনে হচ্ছে না ...
প্রথম সমাধান
এখানে প্রস্তাবিত একটি সমাধান, এনামকে অন্য ক্ষেত্রে রূপান্তর করতে এবং এনাম ক্ষেত্রটিকে ক্ষণস্থায়ী হিসাবে চিহ্নিত করতে @PersPersist এবং @PostLoad ব্যবহার করে:
@Basic
private int intValueForAnEnum;
@PrePersist
void populateDBFields() {
intValueForAnEnum = right.getValue();
}
@PostLoad
void populateTransientFields() {
right = Right.valueOf(intValueForAnEnum);
}
দ্বিতীয় সমাধান
এখানে প্রস্তাবিত দ্বিতীয় সমাধানটিতে জেনেরিক রূপান্তর অবজেক্টের প্রস্তাব দেওয়া হয়েছে , তবে এখনও ভারী এবং হাইবারনেট-ভিত্তিক মনে হচ্ছে (@ টাইপ জাভা EE তে উপস্থিত বলে মনে হচ্ছে না):
@Type(
type = "org.appfuse.tutorial.commons.hibernate.GenericEnumUserType",
parameters = {
@Parameter(
name = "enumClass",
value = "Authority$Right"),
@Parameter(
name = "identifierMethod",
value = "toInt"),
@Parameter(
name = "valueOfMethod",
value = "fromInt")
}
)
অন্য কোন সমাধান আছে কি?
আমার মনে বেশ কয়েকটি ধারণা রয়েছে তবে আমি জানি না যে এগুলি জেপিএতে রয়েছে কিনা:
- কর্তৃপক্ষের অবজেক্টটি লোড করা এবং সংরক্ষণের সময় কর্তৃপক্ষ শ্রেণির ডান সদস্যের সেটার এবং গেটর পদ্ধতিগুলি ব্যবহার করুন
- একটি সমতুল্য ধারণা জেপিএকে বলা হবে এনামকে ইনট এবং ইনটকে এনামে রূপান্তর করতে ডান এনামের কী কী পদ্ধতি রয়েছে?
- যেহেতু আমি স্প্রিং ব্যবহার করছি, জেপিএকে নির্দিষ্ট রূপান্তরকারী (রাইটএডিটর) ব্যবহার করার কোনও উপায় আছে কি?