[DOMA-312] 複数カラムを1つのDomainクラスにマッピングしたい Created: 2014-03-23  Updated: 2014-11-01  Resolved: 2014-11-01

Status: Closed
Project: Doma
Component/s: Core
Affects Version/s: None
Fix Version/s: None

Type: New Feature Priority: Major
Reporter: bufferings Assignee: Unassigned
Resolution: Won't Fix Votes: 0
Labels: None


 Description   

複数カラムを1つのDomainクラスにマッピングしたいです。
今は、1カラムを1ドメインクラスにマッピングできますが、
複数カラムを1ドメインクラスにマッピングできるといいなと思いました。

例えば、氏名というドメインクラスを作って、
そのドメインクラスは、苗字と名前というカラムにマッピングされる属性を持っているようなイメージです。

Java7とDoma1を使ってるのでDoma1での対応を希望します。
ご検討お願いしますー!

@bufferings



 Comments   
Comment by taedium [ 2014-11-01 ]

Domaの既存機能でも実現可能なので対応を見送ります。

Comment by bufferings [ 2014-03-23 ]

すみません、ご提示いただいた方法でもオブジェクトとしては扱えていますね。ちょっと自分で考えてみます!

Comment by bufferings [ 2014-03-23 ]

ありがとうございます。

そのようにして扱うことは可能なのですが、実現させたいこととは少しちがいます。

実現させたいのは、氏名という概念をオブジェクトとして扱いたいということです。あるカラムに意味と型安全性をもたせるという、Domainクラスの考え方マッチするかなと思いました。

対応なしとのことで了解しました。ありがとうございますー。

Comment by taedium [ 2014-03-23 ]

提案ありがとうございます。

おそろく求めているものは、現在の Doma でも比較的簡単に実現できると考えています。
次のようなコードにするのはいかがですか?

Employee.java
@Entity
public class Employee {
	@Id
	private Integer id;
	private String firstName;
	private String lastName;

	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	public FullName getFullName() {
	    return new FullName(firstName, lastName);
	}

	public void setFullName(FullName fullName) {
		firstName = fullName.getFirstName();
		lastName = fullName.getLastName();
	}
}
FullName.java
public class FullName {
	private final String firstName;
	private final String lastName;
	
	public FullName(String fisrtName, String lastName) {
		this.firstName = firstName;
		this.lastName = lastName;
	}

	public String getFirstName() {
		return firstName;
	}

	public String getLastName() {
		return lastName;
	}
}

getFullNameやsetFullNameの記述を複数エンティティで繰り返すのが面倒だとういう場合は親クラスで共通化することも可能です。

Doma で同等の機能を提供しようとすると新たなアノテーションや規約を追加することになり返って複雑さが増してしまうため、
上記のようなコードで要件を満たせるのであれば Doma での対応は見送りたいと思います。

Generated at Mon Dec 15 07:47:27 JST 2025 using Jira 10.6.1#10060001-sha1:a6461e220f274b29ced7ac9295492f2465fe5ef5.