현재 최대 절전 모드를 배우려고하고 있으며 OOP와 DB 관점 모두에서 합당한 것으로 보이는 문제가 발생했지만 해결 방법을 찾을 수 없습니다.enum이있는 최대 절전 모드 룩업 테이블
내 자바 부분은 더 많거나 적은 같은 같습니다
@Entity
@Table (name = "Vehicles")
class Vehicle {
@Id
@Column (name = "UUID")
UUID id;
VehicleType type
(getters, setters, other values, etc.)
}
enum VehicleType {
TRUCK,
TRAILER,
OTHER;
}
내 DB 부분은 두 개의 테이블이 있습니다 - 차량 유형에 대한 차량 조회 테이블 하나
차량
UUID VARCHAR (PK)
vehicle_type_id INT (FK to VehicleTypes)
을
차량 유형
vehicle_type_id INT (PK)
vehicle_type VARCHAR
제 질문은 제시된 방식으로 이것을 배열 할 수 있습니까? 가능한 경우 구현 방법 (주석 등). 그렇지 않다면 유사한 구조를 구현하는 가장 좋은 방법은 무엇입니까?
----- 나는 내 목표 앤서니 파트 리 설명 solution를 사용하여 (더 이하)를 달성하기 위해 관리해야 -----
편집 할 수 있습니다. 자바 부분은 다음과 같습니다 동안
DB 부분은 동일한 체재 :
@Entity
@Table (name = "Vehicles")
class Vehicle {
@Id
@Column (name = "UUID")
UUID id;
@Column (name = "vehicle_type_id")
@Type (type = "VehicleEnumUserType")
VehicleType type
(getters, setters, other values, etc.)
}
enum VehicleType {
TRUCK(1),
TRAILER(2),
OTHER(0);
private int value;
VehicleType(int value){
this.value = value;
}
public int getValue() {
return value;
}
public static VehicleType fromValue(int value){
for (VehicleType type : VehicleType.values()){
if (value == type.value) return type;
}
throw new IllegalArgumentException("Value not mapped by VehicleType enum");
}
}
VehicleEnumUserType implements UserType{
private static final int[] SQL_TYPES = {Types.INTEGER};
public Object nullSafeGet(ResultSet resultSet, String[] strings, SharedSessionContractImplementor sharedSessionContractImplementor, Object o)
throws HibernateException, SQLException {
int number = resultSet.getInt(strings[0]);
return resultSet.wasNull() ? null : VehicleType.fromValue(number);
}
public void nullSafeSet(PreparedStatement preparedStatement, Object o, int i, SharedSessionContractImplementor sharedSessionContractImplementor)
throws HibernateException, SQLException {
if (o == null){
preparedStatement.setNull(i, Types.INTEGER);
} else {
preparedStatement.setInt(i, ((VehicleType)o).getValue());
}
}
// other mandatory methods required by UserType interface
}
이 솔루션은 내 요구 사항에 맞는 - 차량 종류는 자바 측 (에 의해 (조회 테이블 제한에 의해) DB 측 모두 제한된다 VehicleType 열거 형). 또한 차량 유형은 정수로 저장되므로 데이터를 저장하는 데 필요한 공간이 줄어 듭니다. 이 솔루션은 새로운 차량 유형 (예 : EnumType.ORDINAL
과 관련된 문제)을 매우 안전하게 추가 할 수 있도록 해 줍니 다.
누군가가이 솔루션을 유용하게 사용할 수 있기를 바랍니다.
하지만이없는 (그리고 내가하고 싶지 않아요) 차량 테이블의 차량 _ 열. vehicle_type_id 만 있고이 두 가지 데이터를 Vehicle 객체에 연결하는 방법을 모릅니다. –
은 vehicle_type 속성 또는 속성의 조합입니까? –
지금까지는 위에서 제시 한 것과 같은 열거 형입니다. –